Skip to content

feat: retire team workspace rollout flags - #14530

Closed
huntcsg wants to merge 9 commits into
mainfrom
remove-team-ff
Closed

feat: retire team workspace rollout flags#14530
huntcsg wants to merge 9 commits into
mainfrom
remove-team-ff

Conversation

@huntcsg

@huntcsg huntcsg commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Summary

Permanently enable team workspaces and consolidated workspace billing in the frontend now that both rollouts are complete.

Changes

  • What: Removes team_workspaces_enabled and consolidated_billing_enabled from remote config, feature-flag consumers, cached overrides, mocks, stories, and tests. Cloud workspace auth and workspace billing are now the direct paths; personal workspaces explicitly marked legacy_stripe retain legacy account billing and top-ups.
  • Root cause: These terminal flags already resolved to true, but retaining conditional branches left startup/auth races, stale false defaults, and two nominal billing modes around a rollout that had already completed.
  • Regression coverage: Updates affected unit and browser coverage, including an end-to-end legacy-rail case that proves workspace discovery switches back to legacy status/balance without displaying the stale workspace balance.

Review Focus

  • Workspace auth initialization remains fail-closed after a workspace becomes active.
  • legacy_stripe personal workspaces still use legacy status, balance, management, and top-up paths while checkout uses unified pricing.
  • This PR must deploy before the companion Cloud cleanup removes the compatibility keys from /api/features.

Testing

  • 321 focused Vitest tests
  • pnpm typecheck
  • pnpm typecheck:browser
  • pnpm lint:unstaged
  • staged stylelint, oxfmt, oxlint, ESLint, source/browser typechecks, and knip hooks
  • Playwright: billingFacadeConsumers.spec.ts cloud project (both cases; legacy case rerun after strengthening)

Screenshots

AS IS / TO BE: no visual change. Both flags were already terminally enabled in production; this removes dead rollout branches while preserving the current Cloud UI.

@huntcsg
huntcsg requested a review from a team August 1, 2026 05:14
@dosubot dosubot Bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Aug 1, 2026
@dosubot

dosubot Bot commented Aug 1, 2026

Copy link
Copy Markdown

📄 Knowledge review

Dosu skipped reviewing this PR because your organization has used its 200 included credits for the month. Your usage will reset on 2026-09-01. To have Dosu review this PR before then, ask your organization admin to upgrade to a pro account.


Leave Feedback Ask Dosu about ComfyUI_frontend Add Dosu to your team

@github-actions

github-actions Bot commented Aug 1, 2026

Copy link
Copy Markdown

🎨 Storybook: ✅ Built — View Storybook

Details

⏰ Completed at: 08/02/2026, 04:40:38 AM UTC

Links

🎭 Playwright: ✅ 1778 passed, 0 failed · 2 flaky

📊 Browser Reports
  • chromium: View Report (✅ 1757 / ❌ 0 / ⚠️ 2 / ⏭️ 5)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 18 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

📦 Bundle: 8.21 MB gzip 🟢 -1.25 kB

Details

Summary

  • Raw size: 34.5 MB baseline 34.5 MB — 🟢 -5.35 kB
  • Gzip: 8.21 MB baseline 8.21 MB — 🟢 -1.25 kB
  • Brotli: 5.68 MB baseline 5.68 MB — 🟢 -1.13 kB
  • Bundles: 427 current • 427 baseline • 158 added / 158 removed

Category Glance
Data & Services 🟢 -5.12 kB (3.44 MB) · Other 🔴 +1.66 kB (12.8 MB) · Utilities & Hooks 🟢 -1.12 kB (384 kB) · Panels & Settings 🟢 -588 B (551 kB) · Graph Workspace 🟢 -180 B (1.29 MB) · Vendor & Third-Party ⚪ 0 B (15.7 MB) · + 5 more

App Entry Points — 3.64 kB (baseline 3.64 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-BPJ_DlS3.js (removed) 3.64 kB 🟢 -3.64 kB 🟢 -1.82 kB 🟢 -1.58 kB
assets/index-nqgAS7bv.js (new) 3.64 kB 🔴 +3.64 kB 🔴 +1.82 kB 🔴 +1.58 kB

Status: 1 added / 1 removed

Graph Workspace — 1.29 MB (baseline 1.29 MB) • 🟢 -180 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-XDLUXkDH.js (removed) 1.29 MB 🟢 -1.29 MB 🟢 -276 kB 🟢 -208 kB
assets/GraphView-HazTKZO8.js (new) 1.29 MB 🔴 +1.29 MB 🔴 +276 kB 🔴 +208 kB

Status: 1 added / 1 removed / 1 unchanged

Views & Navigation — 111 kB (baseline 111 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-ChFRjgMV.js (removed) 24.9 kB 🟢 -24.9 kB 🟢 -6.22 kB 🟢 -5.51 kB
assets/CloudSurveyView-CNCxi9_o.js (new) 24.9 kB 🔴 +24.9 kB 🔴 +6.22 kB 🔴 +5.51 kB
assets/CloudLoginView-5oYb5JLb.js (removed) 11.6 kB 🟢 -11.6 kB 🟢 -3.1 kB 🟢 -2.73 kB
assets/CloudLoginView-ofaZeS4p.js (new) 11.6 kB 🔴 +11.6 kB 🔴 +3.1 kB 🔴 +2.73 kB
assets/CloudSignupView-CLrDYO90.js (removed) 9.9 kB 🟢 -9.9 kB 🟢 -2.78 kB 🟢 -2.43 kB
assets/CloudSignupView-Dhxxv-5i.js (new) 9.9 kB 🔴 +9.9 kB 🔴 +2.78 kB 🔴 +2.43 kB
assets/CloudLayoutView-D0xF153R.js (removed) 9.48 kB 🟢 -9.48 kB 🟢 -2.31 kB 🟢 -2 kB
assets/CloudLayoutView-I9GL2xcs.js (new) 9.48 kB 🔴 +9.48 kB 🔴 +2.32 kB 🔴 +2 kB
assets/UserCheckView-NjG6l8ZL.js (removed) 8.75 kB 🟢 -8.75 kB 🟢 -2.19 kB 🟢 -1.9 kB
assets/UserCheckView-yEtM8ToO.js (new) 8.75 kB 🔴 +8.75 kB 🔴 +2.19 kB 🔴 +1.9 kB
assets/WidgetTextPreview-CEJ6H_Vz.js (new) 6.07 kB 🔴 +6.07 kB 🔴 +2.13 kB 🔴 +1.89 kB
assets/WidgetTextPreview-DMTkO-nF.js (removed) 6.07 kB 🟢 -6.07 kB 🟢 -2.13 kB 🟢 -1.89 kB
assets/CloudSubscriptionRedirectView-CpxXfACL.js (new) 5.99 kB 🔴 +5.99 kB 🔴 +2.23 kB 🔴 +1.94 kB
assets/CloudSubscriptionRedirectView-d-QCQ9s7.js (removed) 5.99 kB 🟢 -5.99 kB 🟢 -2.23 kB 🟢 -1.94 kB
assets/UserSelectView-DeWgdUe1.js (new) 5.49 kB 🔴 +5.49 kB 🔴 +1.96 kB 🔴 +1.71 kB
assets/UserSelectView-DwUcbbe6.js (removed) 5.49 kB 🟢 -5.49 kB 🟢 -1.96 kB 🟢 -1.71 kB
assets/CloudForgotPasswordView-CqdgUm9B.js (removed) 5.09 kB 🟢 -5.09 kB 🟢 -1.73 kB 🟢 -1.51 kB
assets/CloudForgotPasswordView-DGmZ0-7z.js (new) 5.09 kB 🔴 +5.09 kB 🔴 +1.73 kB 🔴 +1.51 kB
assets/CloudAuthTimeoutView-C1x6wOOR.js (new) 4.43 kB 🔴 +4.43 kB 🔴 +1.53 kB 🔴 +1.34 kB
assets/CloudAuthTimeoutView-Te_W1KW0.js (removed) 4.43 kB 🟢 -4.43 kB 🟢 -1.53 kB 🟢 -1.34 kB
assets/OAuthLayoutView-CGtEL8Bu.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +700 B 🔴 +595 B
assets/OAuthLayoutView-r1PkMZS0.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -700 B 🟢 -594 B
assets/WidgetTextPreview-DDOekhY3.js (removed) 131 B 🟢 -131 B 🟢 -100 B 🟢 -90 B
assets/WidgetTextPreview-OJPaAU1J.js (new) 131 B 🔴 +131 B 🔴 +100 B 🔴 +98 B

Status: 12 added / 12 removed / 4 unchanged

Panels & Settings — 551 kB (baseline 551 kB) • 🟢 -588 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/KeybindingPanel-9V4vAIKa.js (removed) 49.4 kB 🟢 -49.4 kB 🟢 -9.94 kB 🟢 -8.81 kB
assets/KeybindingPanel-CKZguSbu.js (new) 49.4 kB 🔴 +49.4 kB 🔴 +9.94 kB 🔴 +8.79 kB
assets/SecretsPanel-cXQYnq92.js (removed) 33.7 kB 🟢 -33.7 kB 🟢 -7.86 kB 🟢 -6.89 kB
assets/SecretsPanel-Dyck5Jfz.js (new) 33.7 kB 🔴 +33.7 kB 🔴 +7.86 kB 🔴 +6.9 kB
assets/CreditsPanel-4TCkKzBc.js (removed) 15.9 kB 🟢 -15.9 kB 🟢 -4.63 kB 🟢 -4.07 kB
assets/CreditsPanel-DhVLrpyX.js (new) 15.9 kB 🔴 +15.9 kB 🔴 +4.63 kB 🔴 +4.07 kB
assets/SubscriptionPanel-ClwLnJxD.js (new) 11.5 kB 🔴 +11.5 kB 🔴 +3.65 kB 🔴 +3.2 kB
assets/SubscriptionPanel-qKIGHrKF.js (removed) 11.5 kB 🟢 -11.5 kB 🟢 -3.64 kB 🟢 -3.21 kB
assets/AboutPanel-Bqkr2x5H.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.03 kB 🔴 +2.71 kB
assets/AboutPanel-CAhX8lCv.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.03 kB 🟢 -2.71 kB
assets/ExtensionPanel-aAXB7dbX.js (removed) 9.19 kB 🟢 -9.19 kB 🟢 -2.51 kB 🟢 -2.22 kB
assets/ExtensionPanel-sEYBH49k.js (new) 9.19 kB 🔴 +9.19 kB 🔴 +2.51 kB 🔴 +2.23 kB
assets/ServerConfigPanel-B6HnzJSu.js (removed) 6.09 kB 🟢 -6.09 kB 🟢 -1.94 kB 🟢 -1.73 kB
assets/ServerConfigPanel-DbB8Dung.js (new) 6.09 kB 🔴 +6.09 kB 🔴 +1.94 kB 🔴 +1.72 kB
assets/UserPanel-7E5hvdxq.js (new) 5.73 kB 🔴 +5.73 kB 🔴 +1.78 kB 🔴 +1.55 kB
assets/UserPanel-CkcdGLyk.js (removed) 5.73 kB 🟢 -5.73 kB 🟢 -1.78 kB 🟢 -1.55 kB
assets/refreshRemoteConfig-BlMo88my.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -1.26 kB 🟢 -1.11 kB
assets/refreshRemoteConfig-C8MKaHoP.js (new) 2.68 kB 🔴 +2.68 kB 🔴 +1.19 kB 🔴 +1.05 kB
assets/remoteConfig-YkLu9oQL.js (removed) 1.58 kB 🟢 -1.58 kB 🟢 -710 B 🟢 -594 B
assets/remoteConfig-CxKzVowS.js (new) 1.25 kB 🔴 +1.25 kB 🔴 +618 B 🔴 +518 B
assets/cloudRemoteConfig-AJQa_UJs.js (removed) 933 B 🟢 -933 B 🟢 -504 B 🟢 -421 B
assets/cloudRemoteConfig-CUQJWzQu.js (new) 933 B 🔴 +933 B 🔴 +504 B 🔴 +420 B
assets/refreshRemoteConfig-CQb1wgJl.js (new) 110 B 🔴 +110 B 🔴 +89 B 🔴 +86 B
assets/refreshRemoteConfig-DstvaWCE.js (removed) 110 B 🟢 -110 B 🟢 -89 B 🟢 -88 B

Status: 12 added / 12 removed / 14 unchanged

User & Accounts — 28.7 kB (baseline 28.7 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/SignUpForm-B8J9Q5nI.js (new) 12.2 kB 🔴 +12.2 kB 🔴 +4.15 kB 🔴 +3.62 kB
assets/SignUpForm-CIg5TYZC.js (removed) 12.2 kB 🟢 -12.2 kB 🟢 -4.15 kB 🟢 -3.62 kB
assets/auth-B52E3v2e.js (removed) 3.65 kB 🟢 -3.65 kB 🟢 -1.27 kB 🟢 -1.09 kB
assets/auth-C5WBlJSl.js (new) 3.65 kB 🔴 +3.65 kB 🔴 +1.27 kB 🔴 +1.09 kB
assets/usePostAuthRedirect-C8kXwgmv.js (new) 3.28 kB 🔴 +3.28 kB 🔴 +1.24 kB 🔴 +1.08 kB
assets/usePostAuthRedirect-Cn_0Rc2J.js (removed) 3.28 kB 🟢 -3.28 kB 🟢 -1.24 kB 🟢 -1.08 kB
assets/UpdatePasswordContent-Bc5syrTn.js (removed) 1.85 kB 🟢 -1.85 kB 🟢 -839 B 🟢 -726 B
assets/UpdatePasswordContent-C-zr3Oav.js (new) 1.85 kB 🔴 +1.85 kB 🔴 +839 B 🔴 +728 B
assets/authStore-CWhqbYK6.js (removed) 128 B 🟢 -128 B 🟢 -107 B 🟢 -103 B
assets/authStore-DswcKHv8.js (new) 128 B 🔴 +128 B 🔴 +107 B 🔴 +103 B
assets/workspaceAuthStore-B2VSSxw6.js (removed) 108 B 🟢 -108 B 🟢 -99 B 🟢 -107 B
assets/workspaceAuthStore-DWTE9QmT.js (new) 108 B 🔴 +108 B 🔴 +99 B 🔴 +106 B
assets/auth-C4UxgwWt.js (removed) 105 B 🟢 -105 B 🟢 -96 B 🟢 -74 B
assets/auth-DslOm1Zd.js (new) 105 B 🔴 +105 B 🔴 +96 B 🔴 +80 B

Status: 7 added / 7 removed / 3 unchanged

Editors & Dialogs — 124 kB (baseline 124 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyHubPublishDialog-BUB26p70.js (new) 90 kB 🔴 +90 kB 🔴 +19.2 kB 🔴 +16.5 kB
assets/ComfyHubPublishDialog-CVjdy6Ie.js (removed) 90 kB 🟢 -90 kB 🟢 -19.2 kB 🟢 -16.5 kB
assets/useShareDialog-9PFJSsYa.js (removed) 23.9 kB 🟢 -23.9 kB 🟢 -5.69 kB 🟢 -5.03 kB
assets/useShareDialog-XbjRhggR.js (new) 23.9 kB 🔴 +23.9 kB 🔴 +5.7 kB 🔴 +5.04 kB
assets/feedbackDialog-C3znxtOD.js (removed) 4.45 kB 🟢 -4.45 kB 🟢 -1.87 kB 🟢 -1.59 kB
assets/feedbackDialog-DvyMV5eR.js (new) 4.45 kB 🔴 +4.45 kB 🔴 +1.87 kB 🔴 +1.59 kB
assets/useRangeEditor-DvEmZLjO.js (new) 3.23 kB 🔴 +3.23 kB 🔴 +1.13 kB 🔴 +1.02 kB
assets/useRangeEditor-V8rukiJ6.js (removed) 3.23 kB 🟢 -3.23 kB 🟢 -1.13 kB 🟢 -1.02 kB
assets/ComfyHubPublishDialog-BqfMraW4.js (removed) 143 B 🟢 -143 B 🟢 -105 B 🟢 -92 B
assets/ComfyHubPublishDialog-CUiU2WZ-.js (new) 143 B 🔴 +143 B 🔴 +105 B 🔴 +89 B
assets/useSubscriptionDialog-C9C0yBuz.js (removed) 108 B 🟢 -108 B 🟢 -102 B 🟢 -96 B
assets/useSubscriptionDialog-nlnWDT4X.js (new) 108 B 🔴 +108 B 🔴 +102 B 🔴 +90 B

Status: 6 added / 6 removed / 1 unchanged

UI Components — 70 kB (baseline 70 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-CpiX4LDm.js (new) 13.5 kB 🔴 +13.5 kB 🔴 +3.73 kB 🔴 +3.31 kB
assets/ComfyQueueButton-E8DPbKv9.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.73 kB 🟢 -3.31 kB
assets/useTerminalTabs-FsxGZzjt.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.69 kB 🔴 +3.26 kB
assets/useTerminalTabs-K3sdnI0e.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.69 kB 🟢 -3.26 kB
assets/InviteMembersForm-Bo-GB1il.js (removed) 7.96 kB 🟢 -7.96 kB 🟢 -2.64 kB 🟢 -2.37 kB
assets/InviteMembersForm-LqeKGjQ4.js (new) 7.96 kB 🔴 +7.96 kB 🔴 +2.64 kB 🔴 +2.35 kB
assets/SubscribeButton-BPMW-zas.js (removed) 2.13 kB 🟢 -2.13 kB 🟢 -956 B 🟢 -834 B
assets/SubscribeButton-DYNeiods.js (new) 2.13 kB 🔴 +2.13 kB 🔴 +954 B 🔴 +836 B
assets/cloudFeedbackTopbarButton-6dnRbnrK.js (removed) 705 B 🟢 -705 B 🟢 -423 B 🟢 -360 B
assets/cloudFeedbackTopbarButton-DAcGP3Ps.js (new) 705 B 🔴 +705 B 🔴 +422 B 🔴 +361 B
assets/ComfyQueueButton-CEvyUVRD.js (removed) 128 B 🟢 -128 B 🟢 -99 B 🟢 -88 B
assets/ComfyQueueButton-DnTpnJXw.js (new) 128 B 🔴 +128 B 🔴 +99 B 🔴 +90 B

Status: 6 added / 6 removed / 9 unchanged

Data & Services — 3.44 MB (baseline 3.45 MB) • 🟢 -5.12 kB

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/settingStore-Oaca3My7.js (removed) 3.17 MB 🟢 -3.17 MB 🟢 -734 kB 🟢 -553 kB
assets/settingStore-CHlzovhh.js (new) 3.17 MB 🔴 +3.17 MB 🔴 +733 kB 🔴 +552 kB
assets/load3dService-DEoJcs-w.js (removed) 132 kB 🟢 -132 kB 🟢 -29.2 kB 🟢 -24.6 kB
assets/load3dService-DMOasry8.js (new) 132 kB 🔴 +132 kB 🔴 +29.3 kB 🔴 +24.6 kB
assets/api-DUjP5o57.js (removed) 93.4 kB 🟢 -93.4 kB 🟢 -25.8 kB 🟢 -22.1 kB
assets/api-VH7ZCaM9.js (new) 93.4 kB 🔴 +93.4 kB 🔴 +25.8 kB 🔴 +22.1 kB
assets/workflowShareService-Br44yKGB.js (removed) 16.4 kB 🟢 -16.4 kB 🟢 -4.89 kB 🟢 -4.33 kB
assets/workflowShareService-BUDaRi5C.js (new) 16.4 kB 🔴 +16.4 kB 🔴 +4.89 kB 🔴 +4.35 kB
assets/keybindingService-BiaMfxO2.js (new) 7.08 kB 🔴 +7.08 kB 🔴 +1.82 kB 🔴 +1.57 kB
assets/keybindingService-Cb_322Y7.js (removed) 7.08 kB 🟢 -7.08 kB 🟢 -1.82 kB 🟢 -1.58 kB
assets/releaseStore-BRRJPqlz.js (removed) 6.72 kB 🟢 -6.72 kB 🟢 -2.03 kB 🟢 -1.78 kB
assets/releaseStore-CRPE5djw.js (new) 6.72 kB 🔴 +6.72 kB 🔴 +2.03 kB 🔴 +1.78 kB
assets/systemStatsStore-BywJKKOt.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.74 kB 🔴 +1.47 kB
assets/systemStatsStore-D1jiOUMQ.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.74 kB 🟢 -1.47 kB
assets/userStore-CEsq0JTK.js (new) 2.38 kB 🔴 +2.38 kB 🔴 +898 B 🔴 +793 B
assets/userStore-CIAX8ACZ.js (removed) 2.38 kB 🟢 -2.38 kB 🟢 -898 B 🟢 -795 B
assets/audioService-42KHHZFD.js (removed) 1.71 kB 🟢 -1.71 kB 🟢 -829 B 🟢 -724 B
assets/audioService-BUujJbK4.js (new) 1.71 kB 🔴 +1.71 kB 🔴 +830 B 🔴 +722 B
assets/dialogService-BoQoS_8i.js (removed) 98 B 🟢 -98 B 🟢 -97 B 🟢 -84 B
assets/dialogService-CM1JVXxQ.js (new) 98 B 🔴 +98 B 🔴 +97 B 🔴 +86 B
assets/releaseStore-BSrrXTO0.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +84 B
assets/releaseStore-DDxQL6Pl.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -85 B
assets/settingStore-CAAhTsdC.js (removed) 95 B 🟢 -95 B 🟢 -86 B 🟢 -86 B
assets/settingStore-DvH1qHw4.js (new) 95 B 🔴 +95 B 🔴 +86 B 🔴 +83 B
assets/assetsStore-b3rM1cYH.js (new) 94 B 🔴 +94 B 🔴 +92 B 🔴 +84 B
assets/assetsStore-JgIKAfWR.js (removed) 94 B 🟢 -94 B 🟢 -92 B 🟢 -86 B
assets/api-BUN1Pk34.js (new) 62 B 🔴 +62 B 🔴 +74 B 🔴 +66 B
assets/api-Cd7Dz3F7.js (removed) 62 B 🟢 -62 B 🟢 -74 B 🟢 -66 B

Status: 14 added / 14 removed / 3 unchanged

Utilities & Hooks — 384 kB (baseline 386 kB) • 🟢 -1.12 kB

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useConflictDetection-C137DYhM.js (removed) 235 kB 🟢 -235 kB 🟢 -52.5 kB 🟢 -42.7 kB
assets/useConflictDetection-C78Nj-e_.js (new) 235 kB 🔴 +235 kB 🔴 +52.5 kB 🔴 +42.7 kB
assets/useLoad3d-Bluu98Dx.js (new) 25.7 kB 🔴 +25.7 kB 🔴 +5.79 kB 🔴 +5.13 kB
assets/useLoad3d-D5EIyZxq.js (removed) 25.7 kB 🟢 -25.7 kB 🟢 -5.79 kB 🟢 -5.13 kB
assets/useLoad3dViewer-CbkKVsnh.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +4.98 kB 🔴 +4.38 kB
assets/useLoad3dViewer-yxgZsBfJ.js (removed) 21.2 kB 🟢 -21.2 kB 🟢 -4.98 kB 🟢 -4.38 kB
assets/useImageCrop-CBP6Mr1E.js (new) 15 kB 🔴 +15 kB 🔴 +3.42 kB 🔴 +2.98 kB
assets/useImageCrop-Djz8t6bj.js (removed) 15 kB 🟢 -15 kB 🟢 -3.42 kB 🟢 -2.98 kB
assets/useDowngradeToPersonal-Dw6xHdx6.js (new) 8.85 kB 🔴 +8.85 kB 🔴 +2.53 kB 🔴 +2.17 kB
assets/useDowngradeToPersonal-zMv7v64m.js (removed) 8.85 kB 🟢 -8.85 kB 🟢 -2.53 kB 🟢 -2.17 kB
assets/useFeatureFlags-B8zwf5-4.js (removed) 7.31 kB 🟢 -7.31 kB 🟢 -2.18 kB 🟢 -1.83 kB
assets/useFeatureFlags-DCHHIeyT.js (new) 6.23 kB 🔴 +6.23 kB 🔴 +1.86 kB 🔴 +1.59 kB
assets/useExternalLink-BETuSSO0.js (new) 2.81 kB 🔴 +2.81 kB 🔴 +1.06 kB 🔴 +918 B
assets/useExternalLink-f7Bd_v19.js (removed) 2.81 kB 🟢 -2.81 kB 🟢 -1.06 kB 🟢 -917 B
assets/downloadUtil-CqWZ5cD1.js (new) 2.4 kB 🔴 +2.4 kB 🔴 +1.08 kB 🔴 +872 B
assets/downloadUtil-W04a5rsA.js (removed) 2.4 kB 🟢 -2.4 kB 🟢 -1.08 kB 🟢 -871 B
assets/assetPreviewUtil-BdmstwWs.js (removed) 2.35 kB 🟢 -2.35 kB 🟢 -968 B 🟢 -837 B
assets/assetPreviewUtil-CbZKfxAm.js (new) 2.35 kB 🔴 +2.35 kB 🔴 +970 B 🔴 +835 B
assets/useUpstreamValue-DokIdhwM.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +757 B 🔴 +675 B
assets/useUpstreamValue-Dw93IDzp.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -759 B 🟢 -677 B
assets/useWorkspaceTierLabel-BySvoU3w.js (new) 1.93 kB 🔴 +1.93 kB 🔴 +816 B 🔴 +692 B
assets/useWorkspaceTierLabel-DNIpfQBG.js (removed) 1.93 kB 🟢 -1.93 kB 🟢 -813 B 🟢 -694 B
assets/useErrorHandling-CEuNxrvp.js (new) 1.49 kB 🔴 +1.49 kB 🔴 +613 B 🔴 +522 B
assets/useErrorHandling-DeajAfyJ.js (removed) 1.49 kB 🟢 -1.49 kB 🟢 -616 B 🟢 -523 B
assets/subscriptionCheckoutUtil-D0JGppuQ.js (new) 841 B 🔴 +841 B 🔴 +503 B 🔴 +426 B
assets/subscriptionCheckoutUtil-tBvPYNKw.js (removed) 841 B 🟢 -841 B 🟢 -503 B 🟢 -424 B
assets/useSessionCookie-DhX30yQg.js (removed) 692 B 🟢 -692 B 🟢 -356 B 🟢 -333 B
assets/useSessionCookie-ChDd0B25.js (new) 652 B 🔴 +652 B 🔴 +335 B 🔴 +292 B
assets/useLoad3d-CDW2C8n8.js (new) 311 B 🔴 +311 B 🔴 +163 B 🔴 +150 B
assets/useLoad3d-D5JOvDqo.js (removed) 311 B 🟢 -311 B 🟢 -165 B 🟢 -148 B
assets/useSessionCookie-Dap7rX6o.js (new) 101 B 🔴 +101 B 🔴 +86 B 🔴 +77 B
assets/useSessionCookie-DcAz0Rka.js (removed) 101 B 🟢 -101 B 🟢 -86 B 🟢 -80 B
assets/useFeatureFlags-6owpgQ0J.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -82 B
assets/useFeatureFlags-DIOPnEvh.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +82 B
assets/useLoad3dViewer-DgHiaVPL.js (new) 98 B 🔴 +98 B 🔴 +85 B 🔴 +85 B
assets/useLoad3dViewer-DxxnBfHI.js (removed) 98 B 🟢 -98 B 🟢 -85 B 🟢 -88 B
assets/useCurrentUser-BJRxY-Yg.js (removed) 94 B 🟢 -94 B 🟢 -95 B 🟢 -86 B
assets/useCurrentUser-Bm_v-fat.js (new) 94 B 🔴 +94 B 🔴 +95 B 🔴 +85 B

Status: 19 added / 19 removed / 17 unchanged

Vendor & Third-Party — 15.7 MB (baseline 15.7 MB) • ⚪ 0 B

External libraries and shared vendor chunks

Status: 16 unchanged

Other — 12.8 MB (baseline 12.8 MB) • 🔴 +1.66 kB

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/main-DGE99jPo.js (new) 200 kB 🔴 +200 kB 🔴 +58.2 kB 🔴 +48.8 kB
assets/main-CDoyVf92.js (removed) 199 kB 🟢 -199 kB 🟢 -58.1 kB 🟢 -48.8 kB
assets/core-5wx5-bfb.js (removed) 111 kB 🟢 -111 kB 🟢 -28.7 kB 🟢 -24.3 kB
assets/core-Db5F3tp3.js (new) 111 kB 🔴 +111 kB 🔴 +28.7 kB 🔴 +24.3 kB
assets/WidgetSelect-BBQCHcQd.js (new) 88 kB 🔴 +88 kB 🔴 +19.9 kB 🔴 +17.1 kB
assets/WidgetSelect-Zl1iJICe.js (removed) 88 kB 🟢 -88 kB 🟢 -19.9 kB 🟢 -17 kB
assets/Load3D-B6yfZMB9.js (removed) 71.3 kB 🟢 -71.3 kB 🟢 -11.7 kB 🟢 -9.99 kB
assets/Load3D-CxOZBeb2.js (new) 71.3 kB 🔴 +71.3 kB 🔴 +11.7 kB 🔴 +9.97 kB
assets/WidgetVideoEdit-DcEPdhOg.js (new) 63.4 kB 🔴 +63.4 kB 🔴 +14.6 kB 🔴 +12.9 kB
assets/WidgetVideoEdit-iiQEvXzR.js (removed) 63.4 kB 🟢 -63.4 kB 🟢 -14.6 kB 🟢 -12.9 kB
assets/SubscriptionTransitionPreviewWorkspace-B0zEbvc7.js (removed) 63.1 kB 🟢 -63.1 kB 🟢 -13 kB 🟢 -11.3 kB
assets/SubscriptionTransitionPreviewWorkspace-wA-C2uS3.js (new) 63 kB 🔴 +63 kB 🔴 +13 kB 🔴 +11.3 kB
assets/WorkspaceSettingsPanelContent-CjpuZnVT.js (new) 61.6 kB 🔴 +61.6 kB 🔴 +13.2 kB 🔴 +11.5 kB
assets/WorkspaceSettingsPanelContent-CT6vpYJO.js (removed) 61.6 kB 🟢 -61.6 kB 🟢 -13.2 kB 🟢 -11.5 kB
assets/Preview3d-Bi61PNOz.js (new) 50.9 kB 🔴 +50.9 kB 🔴 +8.3 kB 🔴 +7.24 kB
assets/Preview3d-BOzYkxgN.js (removed) 50.9 kB 🟢 -50.9 kB 🟢 -8.31 kB 🟢 -7.23 kB
assets/main-Bf1ybtuE.js (new) 48.1 kB 🔴 +48.1 kB 🔴 +14.1 kB 🔴 +12.2 kB
assets/main-B-v1O9xX.js (removed) 46.9 kB 🟢 -46.9 kB 🟢 -13.8 kB 🟢 -12 kB
assets/SubscriptionRequiredDialogContentUnified-o4jw-_4E.js (removed) 42.7 kB 🟢 -42.7 kB 🟢 -9.42 kB 🟢 -8.21 kB
assets/SubscriptionRequiredDialogContentUnified-7ZqTnmWO.js (new) 42.3 kB 🔴 +42.3 kB 🔴 +9.32 kB 🔴 +8.13 kB
assets/MembersPanelContent-Cm7c66CQ.js (new) 41.8 kB 🔴 +41.8 kB 🔴 +8.79 kB 🔴 +7.83 kB
assets/MembersPanelContent-KTowO-6E.js (removed) 41.8 kB 🟢 -41.8 kB 🟢 -8.79 kB 🟢 -7.83 kB
assets/WidgetBoundingBoxes-5ftVQGTH.js (new) 33.7 kB 🔴 +33.7 kB 🔴 +9.16 kB 🔴 +8.13 kB
assets/WidgetBoundingBoxes-DZnWG_OY.js (removed) 33.7 kB 🟢 -33.7 kB 🟢 -9.16 kB 🟢 -8.13 kB
assets/WidgetPainter-Ccasct20.js (new) 32.6 kB 🔴 +32.6 kB 🔴 +7.87 kB 🔴 +6.95 kB
assets/WidgetPainter-DHuW_SMQ.js (removed) 32.6 kB 🟢 -32.6 kB 🟢 -7.87 kB 🟢 -6.97 kB
assets/SubscriptionPanelContentWorkspace-DOoLRcWI.js (removed) 31.8 kB 🟢 -31.8 kB 🟢 -7.05 kB 🟢 -6.21 kB
assets/SubscriptionPanelContentWorkspace-zv3oflSS.js (new) 31.8 kB 🔴 +31.8 kB 🔴 +7.05 kB 🔴 +6.21 kB
assets/Load3dViewerContent-BcwwdUXg.js (new) 30.8 kB 🔴 +30.8 kB 🔴 +6.26 kB 🔴 +5.43 kB
assets/Load3dViewerContent-C6C2ssKz.js (removed) 30.8 kB 🟢 -30.8 kB 🟢 -6.26 kB 🟢 -5.44 kB
assets/HdrViewerContent-BgiS4zw2.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -8.25 kB 🟢 -7.27 kB
assets/HdrViewerContent-CKC0LP2a.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +8.25 kB 🔴 +7.27 kB
assets/SubscriptionRequiredDialogContent-BFvWEYVs.js (new) 26.1 kB 🔴 +26.1 kB 🔴 +6.14 kB 🔴 +5.42 kB
assets/SubscriptionRequiredDialogContent-BmEYXfxq.js (removed) 26.1 kB 🟢 -26.1 kB 🟢 -6.14 kB 🟢 -5.4 kB
assets/SubscriptionRequiredDialogContentWorkspace-DXmhgoUO.js (removed) 25.1 kB 🟢 -25.1 kB 🟢 -5.8 kB 🟢 -5.11 kB
assets/SubscriptionRequiredDialogContentWorkspace-V4qHId-b.js (new) 25.1 kB 🔴 +25.1 kB 🔴 +5.8 kB 🔴 +5.11 kB
assets/initHostTelemetry-CJvPjEub.js (removed) 24.4 kB 🟢 -24.4 kB 🟢 -5.77 kB 🟢 -4.78 kB
assets/initHostTelemetry-CuJ5uR38.js (new) 24.4 kB 🔴 +24.4 kB 🔴 +5.77 kB 🔴 +4.79 kB
assets/load3d-_sL2Uhvv.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +5.4 kB 🔴 +4.67 kB
assets/load3d-8YobZW3U.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -5.41 kB 🟢 -4.67 kB
assets/CurrentUserPopoverWorkspace-B3OpjF9O.js (new) 21.2 kB 🔴 +21.2 kB 🔴 +4.78 kB 🔴 +4.26 kB
assets/CurrentUserPopoverWorkspace-FI0MJJ1R.js (removed) 20.5 kB 🟢 -20.5 kB 🟢 -4.69 kB 🟢 -4.17 kB
assets/SignInContent-BDxKDPDO.js (new) 20.2 kB 🔴 +20.2 kB 🔴 +5.1 kB 🔴 +4.45 kB
assets/SignInContent-C8Gkkgjs.js (removed) 20.2 kB 🟢 -20.2 kB 🟢 -5.1 kB 🟢 -4.45 kB
assets/CreditsTile-Bb-rM_By.js (new) 19 kB 🔴 +19 kB 🔴 +4.77 kB 🔴 +4.2 kB
assets/CreditsTile-uE8qOReh.js (removed) 19 kB 🟢 -19 kB 🟢 -4.77 kB 🟢 -4.21 kB
assets/WidgetRecordAudio-C8aHLzNU.js (removed) 16.6 kB 🟢 -16.6 kB 🟢 -4.6 kB 🟢 -4.09 kB
assets/WidgetRecordAudio-CxxUr5E4.js (new) 16.6 kB 🔴 +16.6 kB 🔴 +4.6 kB 🔴 +4.1 kB
assets/WidgetInputNumber-Ci8KDjhp.js (removed) 13.9 kB 🟢 -13.9 kB 🟢 -3.63 kB 🟢 -3.21 kB
assets/WidgetInputNumber-UO-PCiUu.js (new) 13.9 kB 🔴 +13.9 kB 🔴 +3.63 kB 🔴 +3.21 kB
assets/WidgetRange-Cab1AO0B.js (removed) 13.7 kB 🟢 -13.7 kB 🟢 -3.54 kB 🟢 -3.12 kB
assets/WidgetRange-DM-BGEWy.js (new) 13.7 kB 🔴 +13.7 kB 🔴 +3.54 kB 🔴 +3.11 kB
assets/WaveAudioPlayer-94nFpY2-.js (new) 12.8 kB 🔴 +12.8 kB 🔴 +3.46 kB 🔴 +3.05 kB
assets/WaveAudioPlayer-BPZN-1xn.js (removed) 12.8 kB 🟢 -12.8 kB 🟢 -3.46 kB 🟢 -3.04 kB
assets/i18n-CSDXC6fG.js (new) 12.5 kB 🔴 +12.5 kB 🔴 +3.3 kB 🔴 +2.79 kB
assets/i18n-VfWPNIKM.js (removed) 12.5 kB 🟢 -12.5 kB 🟢 -3.31 kB 🟢 -2.79 kB
assets/WidgetCurve-C55t0adB.js (removed) 11.2 kB 🟢 -11.2 kB 🟢 -3.47 kB 🟢 -3.15 kB
assets/WidgetCurve-gKcDTqFR.js (new) 11.2 kB 🔴 +11.2 kB 🔴 +3.47 kB 🔴 +3.15 kB
assets/AudioPreviewPlayer-ClAEI4yR.js (new) 10.6 kB 🔴 +10.6 kB 🔴 +3.05 kB 🔴 +2.73 kB
assets/AudioPreviewPlayer-DXQL3Tw9.js (removed) 10.6 kB 🟢 -10.6 kB 🟢 -3.04 kB 🟢 -2.72 kB
assets/TeamWorkspacesDialogContent-Dfe2Szb1.js (new) 10.3 kB 🔴 +10.3 kB 🔴 +2.97 kB 🔴 +2.63 kB
assets/TeamWorkspacesDialogContent-pajHDBYa.js (removed) 10.3 kB 🟢 -10.3 kB 🟢 -2.97 kB 🟢 -2.63 kB
assets/onboardingCloudRoutes-DtDNMWuq.js (new) 9.12 kB 🔴 +9.12 kB 🔴 +2.79 kB 🔴 +2.4 kB
assets/onboardingCloudRoutes-Eb3iU6Gn.js (removed) 9.12 kB 🟢 -9.12 kB 🟢 -2.79 kB 🟢 -2.4 kB
assets/Load3DConfiguration-Di8I_uLs.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.61 kB 🔴 +2.29 kB
assets/Load3DConfiguration-UuZ6fQAQ.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.61 kB 🟢 -2.3 kB
assets/WidgetImageCrop-Dp5E3RUA.js (removed) 8.49 kB 🟢 -8.49 kB 🟢 -2.65 kB 🟢 -2.34 kB
assets/WidgetImageCrop-PNS8Hzk9.js (new) 8.49 kB 🔴 +8.49 kB 🔴 +2.65 kB 🔴 +2.34 kB
assets/SetMemberCreditLimitDialogContent-CIOoyoDD.js (new) 8.47 kB 🔴 +8.47 kB 🔴 +2.34 kB 🔴 +2.05 kB
assets/SetMemberCreditLimitDialogContent-CpP5BAV_.js (removed) 8.47 kB 🟢 -8.47 kB 🟢 -2.34 kB 🟢 -2.05 kB
assets/nodeTemplates-Bg1es9fV.js (removed) 8.28 kB 🟢 -8.28 kB 🟢 -2.84 kB 🟢 -2.5 kB
assets/nodeTemplates-BXoUkFAj.js (new) 8.28 kB 🔴 +8.28 kB 🔴 +2.84 kB 🔴 +2.51 kB
assets/NightlySurveyController-CKI3rwwI.js (removed) 7.5 kB 🟢 -7.5 kB 🟢 -2.55 kB 🟢 -2.24 kB
assets/NightlySurveyController-TqY5gxiC.js (new) 7.5 kB 🔴 +7.5 kB 🔴 +2.55 kB 🔴 +2.24 kB
assets/WidgetWithControl-CcKHx_R3.js (removed) 6.37 kB 🟢 -6.37 kB 🟢 -2.59 kB 🟢 -2.3 kB
assets/WidgetWithControl-DqG0Mr5s.js (new) 6.37 kB 🔴 +6.37 kB 🔴 +2.59 kB 🔴 +2.29 kB
assets/tierBenefits-GcmUrmyo.js (removed) 6.2 kB 🟢 -6.2 kB 🟢 -1.97 kB 🟢 -1.71 kB
assets/tierBenefits-OAz7a_gf.js (new) 6.2 kB 🔴 +6.2 kB 🔴 +1.97 kB 🔴 +1.72 kB
assets/CancelSubscriptionDialogContent-DteegBRn.js (removed) 5.97 kB 🟢 -5.97 kB 🟢 -1.98 kB 🟢 -1.74 kB
assets/CancelSubscriptionDialogContent-frbCWvdM.js (new) 5.97 kB 🔴 +5.97 kB 🔴 +1.98 kB 🔴 +1.74 kB
assets/main-Cvnf7HsX.js (new) 5.91 kB 🔴 +5.91 kB 🔴 +1.89 kB 🔴 +1.6 kB
assets/main-GaaEwXLD.js (removed) 5.91 kB 🟢 -5.91 kB 🟢 -1.9 kB 🟢 -1.6 kB
assets/load3dPreviewExtensions-C2BU_JGZ.js (removed) 5.88 kB 🟢 -5.88 kB 🟢 -1.81 kB 🟢 -1.6 kB
assets/load3dPreviewExtensions-DVDW7gfq.js (new) 5.88 kB 🔴 +5.88 kB 🔴 +1.81 kB 🔴 +1.6 kB
assets/missingModelDownload-0mKrzrjS.js (new) 5.88 kB 🔴 +5.88 kB 🔴 +2.07 kB 🔴 +1.81 kB
assets/missingModelDownload-D4oanbco.js (removed) 5.88 kB 🟢 -5.88 kB 🟢 -2.07 kB 🟢 -1.81 kB
assets/launchCancellationFlow-BiOwnrEl.js (removed) 5.18 kB 🟢 -5.18 kB 🟢 -1.78 kB 🟢 -1.55 kB
assets/launchCancellationFlow-Q1K0Bp04.js (new) 5.18 kB 🔴 +5.18 kB 🔴 +1.78 kB 🔴 +1.55 kB
assets/CreateWorkspaceDialogContent-CbQ_6JS5.js (new) 5.12 kB 🔴 +5.12 kB 🔴 +1.79 kB 🔴 +1.55 kB
assets/CreateWorkspaceDialogContent-RsavlTgd.js (removed) 5.12 kB 🟢 -5.12 kB 🟢 -1.79 kB 🟢 -1.55 kB
assets/ChangeMemberRoleDialogContent-DygOeTZ7.js (new) 4.97 kB 🔴 +4.97 kB 🔴 +1.63 kB 🔴 +1.43 kB
assets/ChangeMemberRoleDialogContent-WwLzTHfX.js (removed) 4.97 kB 🟢 -4.97 kB 🟢 -1.63 kB 🟢 -1.43 kB
assets/EditWorkspaceDialogContent-CMFvO8Ul.js (new) 4.93 kB 🔴 +4.93 kB 🔴 +1.76 kB 🔴 +1.53 kB
assets/EditWorkspaceDialogContent-whTnHJ1f.js (removed) 4.93 kB 🟢 -4.93 kB 🟢 -1.76 kB 🟢 -1.52 kB
assets/WidgetTextarea-DCIBXkCx.js (removed) 4.81 kB 🟢 -4.81 kB 🟢 -1.87 kB 🟢 -1.63 kB
assets/WidgetTextarea-DdL7wc67.js (new) 4.81 kB 🔴 +4.81 kB 🔴 +1.87 kB 🔴 +1.63 kB
assets/saveMesh-C8BnL4cy.js (removed) 4.76 kB 🟢 -4.76 kB 🟢 -1.52 kB 🟢 -1.34 kB
assets/saveMesh-COK8AATR.js (new) 4.76 kB 🔴 +4.76 kB 🔴 +1.52 kB 🔴 +1.34 kB
assets/WorkspacePanelContent-Br4t5aTa.js (new) 4.72 kB 🔴 +4.72 kB 🔴 +1.6 kB 🔴 +1.4 kB
assets/WorkspacePanelContent-CTsWD08C.js (removed) 4.72 kB 🟢 -4.72 kB 🟢 -1.6 kB 🟢 -1.4 kB
assets/InviteMemberDialogContent-BBECGk3j.js (removed) 4.68 kB 🟢 -4.68 kB 🟢 -1.58 kB 🟢 -1.38 kB
assets/InviteMemberDialogContent-DEO7uB-Y.js (new) 4.68 kB 🔴 +4.68 kB 🔴 +1.58 kB 🔴 +1.38 kB
assets/ValueControlPopover-BaUHK0qG.js (new) 4.49 kB 🔴 +4.49 kB 🔴 +1.54 kB 🔴 +1.38 kB
assets/ValueControlPopover-C30Z2M41.js (removed) 4.49 kB 🟢 -4.49 kB 🟢 -1.54 kB 🟢 -1.38 kB
assets/ApiNodesSignInContent-Bo38RRFV.js (removed) 4.08 kB 🟢 -4.08 kB 🟢 -1.31 kB 🟢 -1.15 kB
assets/ApiNodesSignInContent-D57NsKbu.js (new) 4.08 kB 🔴 +4.08 kB 🔴 +1.31 kB 🔴 +1.15 kB
assets/DeleteWorkspaceDialogContent-BDSYbORS.js (new) 3.84 kB 🔴 +3.84 kB 🔴 +1.44 kB 🔴 +1.23 kB
assets/DeleteWorkspaceDialogContent-PFcPUicw.js (removed) 3.84 kB 🟢 -3.84 kB 🟢 -1.44 kB 🟢 -1.23 kB
assets/LeaveWorkspaceDialogContent-BQMuGYUT.js (removed) 3.67 kB 🟢 -3.67 kB 🟢 -1.38 kB 🟢 -1.19 kB
assets/LeaveWorkspaceDialogContent-Osk9ELDr.js (new) 3.67 kB 🔴 +3.67 kB 🔴 +1.38 kB 🔴 +1.19 kB
assets/RemoveMemberDialogContent-BmwVDH20.js (removed) 3.65 kB 🟢 -3.65 kB 🟢 -1.33 kB 🟢 -1.15 kB
assets/RemoveMemberDialogContent-BxTj1Aqy.js (new) 3.65 kB 🔴 +3.65 kB 🔴 +1.33 kB 🔴 +1.15 kB
assets/RevokeInviteDialogContent-BLe18j0R.js (removed) 3.56 kB 🟢 -3.56 kB 🟢 -1.35 kB 🟢 -1.17 kB
assets/RevokeInviteDialogContent-CmlQjsPF.js (new) 3.56 kB 🔴 +3.56 kB 🔴 +1.35 kB 🔴 +1.17 kB
assets/InviteMemberUpsellDialogContent-Cm2DWk15.js (new) 3.44 kB 🔴 +3.44 kB 🔴 +1.23 kB 🔴 +1.09 kB
assets/InviteMemberUpsellDialogContent-D_XJCAiI.js (removed) 3.44 kB 🟢 -3.44 kB 🟢 -1.23 kB 🟢 -1.06 kB
assets/workspaceCheckoutTelemetry-Cnybgaya.js (new) 3.4 kB 🔴 +3.4 kB 🔴 +1.52 kB 🔴 +1.33 kB
assets/workspaceCheckoutTelemetry-Crlu5s5J.js (removed) 3.4 kB 🟢 -3.4 kB 🟢 -1.52 kB 🟢 -1.33 kB
assets/Media3DTop-9cz33SvZ.js (new) 3.21 kB 🔴 +3.21 kB 🔴 +1.26 kB 🔴 +1.1 kB
assets/Media3DTop-BG_Un3Ka.js (removed) 3.21 kB 🟢 -3.21 kB 🟢 -1.26 kB 🟢 -1.1 kB
assets/GlobalToast-By6_ApSN.js (removed) 3 kB 🟢 -3 kB 🟢 -1.22 kB 🟢 -1.04 kB
assets/GlobalToast-CReIMjKu.js (new) 3 kB 🔴 +3 kB 🔴 +1.22 kB 🔴 +1.04 kB
assets/load3dAdvanced-C9QCb9QD.js (removed) 2.82 kB 🟢 -2.82 kB 🟢 -1.09 kB 🟢 -952 B
assets/load3dAdvanced-DYvmWATc.js (new) 2.82 kB 🔴 +2.82 kB 🔴 +1.09 kB 🔴 +950 B
assets/SubscribeToRun-06mSm0SJ.js (removed) 2.39 kB 🟢 -2.39 kB 🟢 -1.03 kB 🟢 -903 B
assets/SubscribeToRun-DzCxYkl2.js (new) 2.39 kB 🔴 +2.39 kB 🔴 +1.03 kB 🔴 +901 B
assets/MediaAudioTop-BdoOLJJ_.js (removed) 1.62 kB 🟢 -1.62 kB 🟢 -805 B 🟢 -663 B
assets/MediaAudioTop-DOgZMGJs.js (new) 1.62 kB 🔴 +1.62 kB 🔴 +806 B 🔴 +665 B
assets/signInSchema-gF350S-2.js (new) 1.55 kB 🔴 +1.55 kB 🔴 +554 B 🔴 +516 B
assets/signInSchema-wnRGmG86.js (removed) 1.55 kB 🟢 -1.55 kB 🟢 -554 B 🟢 -519 B
assets/CloudRunButtonWrapper-CXl0C7U9.js (removed) 1.05 kB 🟢 -1.05 kB 🟢 -517 B 🟢 -481 B
assets/CloudRunButtonWrapper-CxUgoRgi.js (new) 1.05 kB 🔴 +1.05 kB 🔴 +514 B 🔴 +452 B
assets/cloudSessionCookie-BZXn09kY.js (removed) 933 B 🟢 -933 B 🟢 -433 B 🟢 -379 B
assets/cloudSessionCookie-CEiQoD4s.js (new) 933 B 🔴 +933 B 🔴 +432 B 🔴 +378 B
assets/cloudBadges-CmUGU6Ua.js (removed) 922 B 🟢 -922 B 🟢 -518 B 🟢 -458 B
assets/cloudBadges-DA0fiNqn.js (new) 922 B 🔴 +922 B 🔴 +512 B 🔴 +457 B
assets/Load3DAdvanced-B0hYPNWl.js (new) 761 B 🔴 +761 B 🔴 +423 B 🔴 +358 B
assets/Load3DAdvanced-BntGuAmZ.js (removed) 761 B 🟢 -761 B 🟢 -424 B 🟢 -359 B
assets/devFeatureFlagOverride-Bl3R9S_5.js (removed) 696 B 🟢 -696 B 🟢 -433 B 🟢 -358 B
assets/devFeatureFlagOverride-C_0BtUNb.js (new) 680 B 🔴 +680 B 🔴 +427 B 🔴 +353 B
assets/nightlyBadges-DIQLXqNG.js (new) 411 B 🔴 +411 B 🔴 +271 B 🔴 +229 B
assets/nightlyBadges-ySiAUyvD.js (removed) 411 B 🟢 -411 B 🟢 -273 B 🟢 -265 B
assets/missingModelDownload-C9qJ3TwK.js (removed) 371 B 🟢 -371 B 🟢 -201 B 🟢 -173 B
assets/missingModelDownload-Ffv2igJj.js (new) 371 B 🔴 +371 B 🔴 +203 B 🔴 +173 B
assets/SubscriptionPanelContentWorkspace-BBpChnSo.js (removed) 179 B 🟢 -179 B 🟢 -117 B 🟢 -93 B
assets/SubscriptionPanelContentWorkspace-CQoQImed.js (new) 179 B 🔴 +179 B 🔴 +117 B 🔴 +92 B
assets/Load3dViewerContent-CFEBZUU4.js (removed) 137 B 🟢 -137 B 🟢 -103 B 🟢 -99 B
assets/Load3dViewerContent-DDTfTt6k.js (new) 137 B 🔴 +137 B 🔴 +103 B 🔴 +91 B
assets/Load3DAdvanced-5_s8nJ_K.js (new) 122 B 🔴 +122 B 🔴 +97 B 🔴 +88 B
assets/Load3DAdvanced-DH4TYeqW.js (removed) 122 B 🟢 -122 B 🟢 -97 B 🟢 -88 B
assets/WidgetLegacy-H8OZy1oz.js (new) 117 B 🔴 +117 B 🔴 +106 B 🔴 +97 B
assets/WidgetLegacy-qPAVv68R.js (removed) 117 B 🟢 -117 B 🟢 -106 B 🟢 -104 B
assets/workflowDraftStoreV2-BpIKr3O-.js (new) 112 B 🔴 +112 B 🔴 +101 B 🔴 +106 B
assets/workflowDraftStoreV2-BQ8z_dmR.js (removed) 112 B 🟢 -112 B 🟢 -101 B 🟢 -110 B
assets/Load3D-9AtojeMG.js (removed) 98 B 🟢 -98 B 🟢 -89 B 🟢 -83 B
assets/Load3D-CcAstLN5.js (new) 98 B 🔴 +98 B 🔴 +89 B 🔴 +92 B
assets/i18n-13H-bj2O.js (removed) 97 B 🟢 -97 B 🟢 -92 B 🟢 -87 B
assets/i18n-8RBlPlrf.js (new) 97 B 🔴 +97 B 🔴 +92 B 🔴 +101 B
assets/changeTracker-CdXM2mQC.js (new) 91 B 🔴 +91 B 🔴 +93 B 🔴 +78 B
assets/changeTracker-sZG4RvJq.js (removed) 91 B 🟢 -91 B 🟢 -93 B 🟢 -85 B

Status: 80 added / 80 removed / 201 unchanged

⚡ Performance Report

canvas-idle: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 69.1 MB heap
canvas-mouse-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 49.2 MB heap
canvas-zoom-sweep: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 72.2 MB heap
dom-widget-clipping: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 53.3 MB heap
large-graph-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 64.1 MB heap
large-graph-pan: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 62.8 MB heap
large-graph-zoom: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 57.5 MB heap
minimap-idle: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 0ms TBT · 65.1 MB heap
subgraph-dom-widget-clipping: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 54.6 MB heap
subgraph-idle: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 44.1 MB heap
subgraph-mouse-sweep: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 52.5 MB heap
subgraph-transition-enter: · 60.0 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 129ms TBT · 94.7 MB heap
viewport-pan-sweep: · 60.0 avg FPS · 59.7 P5 FPS ✅ (target: ≥52) · 0ms TBT · 68.3 MB heap
vue-large-graph-idle: · 55.4 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 159.3 MB heap
vue-large-graph-pan: · 56.3 avg FPS · 59.9 P5 FPS ✅ (target: ≥52) · 118ms TBT · 164.3 MB heap
workflow-execution: · 60.0 avg FPS · 59.5 P5 FPS ✅ (target: ≥52) · 0ms TBT · 48.6 MB heap

⚠️ 6 regressions detected

Show regressions
Metric Baseline PR (median) Δ Sig
canvas-idle: task duration 497ms 493ms -1% ⚠️ z=3.2
canvas-zoom-sweep: task duration 384ms 375ms -2% ⚠️ z=2.1
large-graph-idle: task duration 712ms 663ms -7% ⚠️ z=2.2
large-graph-pan: task duration 1348ms 1271ms -6% ⚠️ z=4.4
minimap-idle: task duration 685ms 665ms -3% ⚠️ z=2.9
subgraph-idle: task duration 474ms 493ms +4% ⚠️ z=3.9
All metrics
Metric Baseline PR (median) Δ Sig
canvas-idle: avg frame time 17ms 17ms +0% z=-0.1
canvas-idle: p95 frame time 17ms 17ms +1%
canvas-idle: layout duration 0ms 0ms +0%
canvas-idle: style recalc duration 9ms 9ms -2% z=-1.9
canvas-idle: layout count 0 0 +0%
canvas-idle: style recalc count 10 11 +5% z=-1.2
canvas-idle: task duration 497ms 493ms -1% ⚠️ z=3.2
canvas-idle: script duration 20ms 17ms -15% z=-3.9
canvas-idle: TBT 0ms 0ms +0%
canvas-idle: heap used 69.4 MB 69.1 MB -0%
canvas-idle: DOM nodes 20 21 +5% z=-1.2
canvas-idle: event listeners 4 4 +0% z=-1.6
canvas-mouse-sweep: avg frame time 17ms 17ms +0% z=-1.5
canvas-mouse-sweep: p95 frame time 17ms 17ms +0%
canvas-mouse-sweep: layout duration 4ms 4ms -3% z=0.1
canvas-mouse-sweep: style recalc duration 41ms 38ms -8% z=-1.4
canvas-mouse-sweep: layout count 12 12 +0%
canvas-mouse-sweep: style recalc count 78 76 -3% z=-1.4
canvas-mouse-sweep: task duration 911ms 946ms +4% z=1.4
canvas-mouse-sweep: script duration 127ms 130ms +2% z=-0.8
canvas-mouse-sweep: TBT 0ms 0ms +0%
canvas-mouse-sweep: heap used 49.3 MB 49.2 MB -0%
canvas-mouse-sweep: DOM nodes -278 -282 +1% z=-132.9
canvas-mouse-sweep: event listeners -148 -148 +0% z=-37.5
canvas-zoom-sweep: avg frame time 17ms 17ms -0% z=-0.3
canvas-zoom-sweep: p95 frame time 17ms 17ms -0%
canvas-zoom-sweep: layout duration 1ms 1ms +6% z=0.5
canvas-zoom-sweep: style recalc duration 18ms 16ms -8% z=-1.9
canvas-zoom-sweep: layout count 6 6 +0%
canvas-zoom-sweep: style recalc count 32 32 +0% z=1.6
canvas-zoom-sweep: task duration 384ms 375ms -2% ⚠️ z=2.1
canvas-zoom-sweep: script duration 21ms 19ms -8% z=-2.6
canvas-zoom-sweep: TBT 0ms 0ms +0%
canvas-zoom-sweep: heap used 72.3 MB 72.2 MB -0%
canvas-zoom-sweep: DOM nodes 79 78 -1% z=-1.6
canvas-zoom-sweep: event listeners 19 19 +0% z=-0.9
dom-widget-clipping: avg frame time 17ms 17ms -0% z=-0.2
dom-widget-clipping: p95 frame time 17ms 17ms -1%
dom-widget-clipping: layout duration 0ms 0ms +0%
dom-widget-clipping: style recalc duration 10ms 8ms -16% z=-2.4
dom-widget-clipping: layout count 0 0 +0%
dom-widget-clipping: style recalc count 13 12 -12% z=-3.2
dom-widget-clipping: task duration 400ms 386ms -3% z=1.3
dom-widget-clipping: script duration 61ms 60ms -1% z=-2.3
dom-widget-clipping: TBT 0ms 0ms +0%
dom-widget-clipping: heap used 53.0 MB 53.3 MB +0%
dom-widget-clipping: DOM nodes 22 19 -14% z=-2.2
dom-widget-clipping: event listeners 2 1 -50% variance too high
large-graph-idle: avg frame time 17ms 17ms -0% z=-0.6
large-graph-idle: p95 frame time 17ms 17ms -1%
large-graph-idle: layout duration 0ms 0ms +0%
large-graph-idle: style recalc duration 8ms 8ms +3% z=-3.9
large-graph-idle: layout count 0 0 +0%
large-graph-idle: style recalc count 8 9 +6% z=-9.9
large-graph-idle: task duration 712ms 663ms -7% ⚠️ z=2.2
large-graph-idle: script duration 121ms 102ms -16% z=-0.0
large-graph-idle: TBT 0ms 0ms +0%
large-graph-idle: heap used 64.3 MB 64.1 MB -0%
large-graph-idle: DOM nodes -283 -281 -1% z=-338.2
large-graph-idle: event listeners -144 -142 -1% z=-27.6
large-graph-pan: avg frame time 17ms 17ms +0% z=0.3
large-graph-pan: p95 frame time 17ms 17ms -0%
large-graph-pan: layout duration 0ms 0ms +0%
large-graph-pan: style recalc duration 14ms 13ms -3% z=-4.8
large-graph-pan: layout count 0 0 +0%
large-graph-pan: style recalc count 68 69 +1% z=-1.7
large-graph-pan: task duration 1348ms 1271ms -6% ⚠️ z=4.4
large-graph-pan: script duration 459ms 428ms -7% z=1.0
large-graph-pan: TBT 0ms 0ms +0%
large-graph-pan: heap used 60.5 MB 62.8 MB +4%
large-graph-pan: DOM nodes -284 -283 -0% z=-183.0
large-graph-pan: event listeners -144 -143 -1% z=-178.6
large-graph-zoom: avg frame time 17ms 17ms +0%
large-graph-zoom: p95 frame time 17ms 17ms +0%
large-graph-zoom: layout duration 7ms 7ms -5%
large-graph-zoom: style recalc duration 16ms 14ms -13%
large-graph-zoom: layout count 60 60 +0%
large-graph-zoom: style recalc count 64 64 +0%
large-graph-zoom: task duration 1537ms 1497ms -3%
large-graph-zoom: script duration 538ms 528ms -2%
large-graph-zoom: TBT 0ms 0ms +0%
large-graph-zoom: heap used 60.8 MB 57.5 MB -5%
large-graph-zoom: DOM nodes -287 -288 +0%
large-graph-zoom: event listeners -148 -148 +0%
minimap-idle: avg frame time 17ms 17ms +0% z=-0.4
minimap-idle: p95 frame time 17ms 17ms -0%
minimap-idle: layout duration 0ms 0ms +0%
minimap-idle: style recalc duration 7ms 7ms -6% z=-3.4
minimap-idle: layout count 0 0 +0%
minimap-idle: style recalc count 8 8 +0% z=-2.3
minimap-idle: task duration 685ms 665ms -3% ⚠️ z=2.9
minimap-idle: script duration 109ms 106ms -3% z=0.7
minimap-idle: TBT 0ms 0ms +0%
minimap-idle: heap used 65.5 MB 65.1 MB -1%
minimap-idle: DOM nodes -283 -283 +0% z=-220.9
minimap-idle: event listeners -144 -144 +0% z=-225.0
subgraph-dom-widget-clipping: avg frame time 17ms 17ms +0% z=0.1
subgraph-dom-widget-clipping: p95 frame time 17ms 17ms +1%
subgraph-dom-widget-clipping: layout duration 0ms 0ms +0%
subgraph-dom-widget-clipping: style recalc duration 11ms 11ms -3% z=-2.0
subgraph-dom-widget-clipping: layout count 0 0 +0%
subgraph-dom-widget-clipping: style recalc count 47 47 +0% z=-1.6
subgraph-dom-widget-clipping: task duration 403ms 396ms -2% z=0.9
subgraph-dom-widget-clipping: script duration 119ms 119ms +0% z=-1.4
subgraph-dom-widget-clipping: TBT 0ms 0ms +0%
subgraph-dom-widget-clipping: heap used 54.5 MB 54.6 MB +0%
subgraph-dom-widget-clipping: DOM nodes 20 20 +0% z=-1.9
subgraph-dom-widget-clipping: event listeners 6 6 +0% z=-1.7
subgraph-idle: avg frame time 17ms 17ms -0% z=-0.2
subgraph-idle: p95 frame time 17ms 17ms +0%
subgraph-idle: layout duration 0ms 0ms +0%
subgraph-idle: style recalc duration 9ms 9ms -9% z=-2.3
subgraph-idle: layout count 0 0 +0%
subgraph-idle: style recalc count 10 10 +0% z=-1.4
subgraph-idle: task duration 474ms 493ms +4% ⚠️ z=3.9
subgraph-idle: script duration 15ms 13ms -9% z=-2.5
subgraph-idle: TBT 0ms 0ms +0%
subgraph-idle: heap used 69.0 MB 44.1 MB -36%
subgraph-idle: DOM nodes 20 -129 -745% z=-100.9
subgraph-idle: event listeners 4 -72 -1900% variance too high
subgraph-mouse-sweep: avg frame time 17ms 17ms +0% z=0.8
subgraph-mouse-sweep: p95 frame time 17ms 17ms +0%
subgraph-mouse-sweep: layout duration 4ms 4ms -5% z=-1.4
subgraph-mouse-sweep: style recalc duration 37ms 35ms -5% z=-2.3
subgraph-mouse-sweep: layout count 16 16 +0%
subgraph-mouse-sweep: style recalc count 76 76 +0% z=-2.1
subgraph-mouse-sweep: task duration 817ms 774ms -5% z=0.1
subgraph-mouse-sweep: script duration 94ms 91ms -4% z=-1.5
subgraph-mouse-sweep: TBT 0ms 0ms +0%
subgraph-mouse-sweep: heap used 45.5 MB 52.5 MB +15%
subgraph-mouse-sweep: DOM nodes -279 -110 -61% z=-79.0
subgraph-mouse-sweep: event listeners -148 -72 -51% variance too high
subgraph-transition-enter: avg frame time 17ms 17ms +0%
subgraph-transition-enter: p95 frame time 17ms 17ms -1%
subgraph-transition-enter: layout duration 13ms 12ms -6%
subgraph-transition-enter: style recalc duration 31ms 30ms -3%
subgraph-transition-enter: layout count 14 13 -7%
subgraph-transition-enter: style recalc count 18 17 -6%
subgraph-transition-enter: task duration 959ms 951ms -1%
subgraph-transition-enter: script duration 35ms 35ms -1%
subgraph-transition-enter: TBT 130ms 129ms -1%
subgraph-transition-enter: heap used 96.3 MB 94.7 MB -2%
subgraph-transition-enter: DOM nodes 13673 13673 +0%
subgraph-transition-enter: event listeners 2371 2371 +0%
viewport-pan-sweep: avg frame time 17ms 17ms +0%
viewport-pan-sweep: p95 frame time 17ms 17ms -0%
viewport-pan-sweep: layout duration 0ms 0ms +0%
viewport-pan-sweep: style recalc duration 39ms 35ms -9%
viewport-pan-sweep: layout count 0 0 +0%
viewport-pan-sweep: style recalc count 250 250 -0%
viewport-pan-sweep: task duration 4653ms 4450ms -4%
viewport-pan-sweep: script duration 1434ms 1403ms -2%
viewport-pan-sweep: TBT 0ms 0ms +0%
viewport-pan-sweep: heap used 67.5 MB 68.3 MB +1%
viewport-pan-sweep: DOM nodes -280 -283 +1%
viewport-pan-sweep: event listeners -126 -128 +2%
vue-large-graph-idle: avg frame time 18ms 18ms +2%
vue-large-graph-idle: p95 frame time 17ms 17ms +1%
vue-large-graph-idle: layout duration 0ms 0ms +0%
vue-large-graph-idle: style recalc duration 0ms 0ms +0%
vue-large-graph-idle: layout count 0 0 +0%
vue-large-graph-idle: style recalc count 0 0 +0%
vue-large-graph-idle: task duration 17385ms 16775ms -4%
vue-large-graph-idle: script duration 582ms 574ms -1%
vue-large-graph-idle: TBT 0ms 0ms +0%
vue-large-graph-idle: heap used 159.6 MB 159.3 MB -0%
vue-large-graph-idle: DOM nodes -8312 -8312 +0%
vue-large-graph-idle: event listeners -16387 -16387 +0%
vue-large-graph-pan: avg frame time 18ms 18ms +0%
vue-large-graph-pan: p95 frame time 17ms 17ms -1%
vue-large-graph-pan: layout duration 0ms 0ms +0%
vue-large-graph-pan: style recalc duration 18ms 15ms -14%
vue-large-graph-pan: layout count 0 0 +0%
vue-large-graph-pan: style recalc count 145 138 -5%
vue-large-graph-pan: task duration 20805ms 20184ms -3%
vue-large-graph-pan: script duration 875ms 888ms +2%
vue-large-graph-pan: TBT 195ms 118ms -40%
vue-large-graph-pan: heap used 159.5 MB 164.3 MB +3%
vue-large-graph-pan: DOM nodes -8312 -8317 +0%
vue-large-graph-pan: event listeners -16383 -16383 +0%
workflow-execution: avg frame time 17ms 17ms +0% z=0.1
workflow-execution: p95 frame time 17ms 17ms +0%
workflow-execution: layout duration 1ms 1ms -35% z=-5.2
workflow-execution: style recalc duration 18ms 20ms +10% z=-2.0
workflow-execution: layout count 3 3 -17% z=-4.5
workflow-execution: style recalc count 13 14 +4% z=-2.1
workflow-execution: task duration 120ms 113ms -6% z=-0.9
workflow-execution: script duration 11ms 10ms -13% z=-6.6
workflow-execution: TBT 0ms 0ms +0%
workflow-execution: heap used 48.4 MB 48.6 MB +0%
workflow-execution: DOM nodes 119 124 +4% z=-5.2
workflow-execution: event listeners 65 66 +2% z=3.2
Historical variance (last 15 runs)
Metric μ σ CV
canvas-idle: avg frame time 17ms 0ms 0.0%
canvas-idle: layout duration 0ms 0ms 0.0%
canvas-idle: style recalc duration 11ms 1ms 8.2%
canvas-idle: layout count 0 0 0.0%
canvas-idle: style recalc count 11 1 5.0%
canvas-idle: task duration 395ms 31ms 7.9%
canvas-idle: script duration 25ms 2ms 8.8%
canvas-idle: TBT 0ms 0ms 0.0%
canvas-idle: DOM nodes 23 1 5.6%
canvas-idle: event listeners 12 5 40.9%
canvas-mouse-sweep: avg frame time 17ms 0ms 0.0%
canvas-mouse-sweep: layout duration 4ms 0ms 5.4%
canvas-mouse-sweep: style recalc duration 43ms 3ms 7.4%
canvas-mouse-sweep: layout count 12 0 0.0%
canvas-mouse-sweep: style recalc count 79 2 3.0%
canvas-mouse-sweep: task duration 865ms 58ms 6.7%
canvas-mouse-sweep: script duration 136ms 6ms 4.8%
canvas-mouse-sweep: TBT 0ms 0ms 0.0%
canvas-mouse-sweep: DOM nodes 62 3 4.2%
canvas-mouse-sweep: event listeners 8 4 49.4%
canvas-zoom-sweep: avg frame time 17ms 0ms 0.0%
canvas-zoom-sweep: layout duration 1ms 0ms 7.0%
canvas-zoom-sweep: style recalc duration 19ms 2ms 8.0%
canvas-zoom-sweep: layout count 6 0 0.0%
canvas-zoom-sweep: style recalc count 31 0 1.5%
canvas-zoom-sweep: task duration 327ms 23ms 7.1%
canvas-zoom-sweep: script duration 27ms 3ms 11.1%
canvas-zoom-sweep: TBT 0ms 0ms 0.0%
canvas-zoom-sweep: DOM nodes 79 1 1.0%
canvas-zoom-sweep: event listeners 24 5 21.8%
dom-widget-clipping: avg frame time 17ms 0ms 0.0%
dom-widget-clipping: layout duration 0ms 0ms 0.0%
dom-widget-clipping: style recalc duration 10ms 1ms 8.0%
dom-widget-clipping: layout count 0 0 0.0%
dom-widget-clipping: style recalc count 13 0 3.8%
dom-widget-clipping: task duration 365ms 16ms 4.5%
dom-widget-clipping: script duration 68ms 3ms 4.8%
dom-widget-clipping: TBT 0ms 0ms 0.0%
dom-widget-clipping: DOM nodes 22 1 6.4%
dom-widget-clipping: event listeners 8 6 81.2%
large-graph-idle: avg frame time 17ms 0ms 0.0%
large-graph-idle: layout duration 0ms 0ms 0.0%
large-graph-idle: style recalc duration 12ms 1ms 8.6%
large-graph-idle: layout count 0 0 0.0%
large-graph-idle: style recalc count 12 0 2.7%
large-graph-idle: task duration 542ms 54ms 10.0%
large-graph-idle: script duration 102ms 11ms 10.3%
large-graph-idle: TBT 0ms 0ms 0.0%
large-graph-idle: DOM nodes 25 1 3.7%
large-graph-idle: event listeners 26 6 23.2%
large-graph-pan: avg frame time 17ms 0ms 0.0%
large-graph-pan: layout duration 0ms 0ms 0.0%
large-graph-pan: style recalc duration 17ms 1ms 4.6%
large-graph-pan: layout count 0 0 0.0%
large-graph-pan: style recalc count 70 1 0.9%
large-graph-pan: task duration 1082ms 43ms 4.0%
large-graph-pan: script duration 408ms 20ms 4.8%
large-graph-pan: TBT 0ms 0ms 0.0%
large-graph-pan: DOM nodes 19 2 8.7%
large-graph-pan: event listeners 5 1 16.8%
minimap-idle: avg frame time 17ms 0ms 0.0%
minimap-idle: layout duration 0ms 0ms 0.0%
minimap-idle: style recalc duration 10ms 1ms 8.6%
minimap-idle: layout count 0 0 0.0%
minimap-idle: style recalc count 10 1 7.1%
minimap-idle: task duration 527ms 47ms 9.0%
minimap-idle: script duration 98ms 10ms 10.1%
minimap-idle: TBT 0ms 0ms 0.0%
minimap-idle: DOM nodes 19 1 7.1%
minimap-idle: event listeners 5 1 14.4%
subgraph-dom-widget-clipping: avg frame time 17ms 0ms 0.0%
subgraph-dom-widget-clipping: layout duration 0ms 0ms 0.0%
subgraph-dom-widget-clipping: style recalc duration 13ms 1ms 7.4%
subgraph-dom-widget-clipping: layout count 0 0 0.0%
subgraph-dom-widget-clipping: style recalc count 48 1 1.2%
subgraph-dom-widget-clipping: task duration 378ms 18ms 4.9%
subgraph-dom-widget-clipping: script duration 128ms 6ms 4.9%
subgraph-dom-widget-clipping: TBT 0ms 0ms 0.0%
subgraph-dom-widget-clipping: DOM nodes 22 1 5.0%
subgraph-dom-widget-clipping: event listeners 16 6 36.0%
subgraph-idle: avg frame time 17ms 0ms 0.0%
subgraph-idle: layout duration 0ms 0ms 0.0%
subgraph-idle: style recalc duration 10ms 1ms 7.5%
subgraph-idle: layout count 0 0 0.0%
subgraph-idle: style recalc count 11 1 6.0%
subgraph-idle: task duration 370ms 31ms 8.5%
subgraph-idle: script duration 20ms 3ms 13.2%
subgraph-idle: TBT 0ms 0ms 0.0%
subgraph-idle: DOM nodes 22 1 6.9%
subgraph-idle: event listeners 10 7 64.5%
subgraph-mouse-sweep: avg frame time 17ms 0ms 0.0%
subgraph-mouse-sweep: layout duration 5ms 0ms 6.8%
subgraph-mouse-sweep: style recalc duration 42ms 3ms 7.8%
subgraph-mouse-sweep: layout count 16 0 0.0%
subgraph-mouse-sweep: style recalc count 80 2 2.4%
subgraph-mouse-sweep: task duration 766ms 69ms 9.0%
subgraph-mouse-sweep: script duration 101ms 7ms 6.5%
subgraph-mouse-sweep: TBT 0ms 0ms 0.0%
subgraph-mouse-sweep: DOM nodes 67 2 3.3%
subgraph-mouse-sweep: event listeners 8 4 52.6%
workflow-execution: avg frame time 17ms 0ms 0.0%
workflow-execution: layout duration 2ms 0ms 9.4%
workflow-execution: style recalc duration 24ms 2ms 9.1%
workflow-execution: layout count 5 1 11.0%
workflow-execution: style recalc count 18 2 11.5%
workflow-execution: task duration 123ms 11ms 8.8%
workflow-execution: script duration 29ms 3ms 10.2%
workflow-execution: TBT 0ms 0ms 0.0%
workflow-execution: DOM nodes 161 7 4.4%
workflow-execution: event listeners 52 4 8.4%
Trend (last 15 commits on main)
Metric Trend Dir Latest
canvas-idle: avg frame time ▆▃▆▁▆▃▆█▆▆▄▃▃▄▃ ➡️ 17ms
canvas-idle: p95 frame time ➡️ NaNms
canvas-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: style recalc duration ▇▇▆▆▃█▄▃▄▃▇▄▁▆▇ ➡️ 11ms
canvas-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
canvas-idle: style recalc count █▃▅▂▅▆▃▁▂▁▂▅▆▅▆ ➡️ 12
canvas-idle: task duration ▃▃▃▆▂▃▃▅▆▂█▃▁▃▃ ➡️ 391ms
canvas-idle: script duration ▄▃▅▇▂▅▃▆▇▅█▄▁▅▆ ➡️ 27ms
canvas-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-idle: heap used ➡️ NaN MB
canvas-idle: DOM nodes █▇▆▅▃▇▃▁▂▂▅▆▆▆▇ ➡️ 24
canvas-idle: event listeners ▅█▅▄▁▅▁▁▁▄▅▅▁▅▄ 📉 11
canvas-mouse-sweep: avg frame time ▆█▆▃▁▃▁▆▆▁▃▆▆▃▃ ➡️ 17ms
canvas-mouse-sweep: p95 frame time ➡️ NaNms
canvas-mouse-sweep: layout duration ▁▃▂▄▁▂▁▃▆▂█▇▆▄▃ ➡️ 4ms
canvas-mouse-sweep: style recalc duration ▄▄▂▄▁▂▃▃▅▄█▆▂▄▄ ➡️ 43ms
canvas-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 12
canvas-mouse-sweep: style recalc count █▅▄▃▂▂▁▄▄▅▆▅▂▇▄ ➡️ 79
canvas-mouse-sweep: task duration █▆▄▂▂▃▂▄▄▅█▆▁▆▄ ➡️ 868ms
canvas-mouse-sweep: script duration ▄▅▄▆▄▆▆▆▅▅█▆▁▅▆ ➡️ 139ms
canvas-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-mouse-sweep: heap used ➡️ NaN MB
canvas-mouse-sweep: DOM nodes █▅▃▃▁▂▂▃▂▄▆▅▃▅▅ ➡️ 64
canvas-mouse-sweep: event listeners █▁▁▁▁▁▇▁▁▁██▇▁█ 📈 13
canvas-zoom-sweep: avg frame time ▅▅█▄▅▁▁▁▅▁▁▅▄▅▁ ➡️ 17ms
canvas-zoom-sweep: p95 frame time ➡️ NaNms
canvas-zoom-sweep: layout duration ▆▅▅▄▁▁█▅▃▅▇▆▁▂▆ ➡️ 1ms
canvas-zoom-sweep: style recalc duration ▆▅▄▆▅▃█▆▇▅▇▄▁▃▅ ➡️ 20ms
canvas-zoom-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 6
canvas-zoom-sweep: style recalc count ▁▁▃▄▆▃▆█▄▄▆▁▆▁▆ ➡️ 32
canvas-zoom-sweep: task duration ▄▂▁▇▂▂▄▅▆▃█▄▁▁▅ ➡️ 338ms
canvas-zoom-sweep: script duration ▃▃▂▇▂▂▅▇▆▅█▄▁▂▆ ➡️ 30ms
canvas-zoom-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
canvas-zoom-sweep: heap used ➡️ NaN MB
canvas-zoom-sweep: DOM nodes ▄▃▁▅█▁▃▆▄▅▅▃▃▄▃ ➡️ 79
canvas-zoom-sweep: event listeners ▁▁▂▅█▂▁▅▁▅▅▄▁▅▁ ➡️ 19
dom-widget-clipping: avg frame time ▂▄▅▅▂▄█▇▅▇▇▅▅▁▇ ➡️ 17ms
dom-widget-clipping: p95 frame time ➡️ NaNms
dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: style recalc duration ▆▆▂▆▄▃██▄▁▆▇▆▃▅ ➡️ 10ms
dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
dom-widget-clipping: style recalc count ▇█▅█▅▄█▇▇▁▇▄▇▂▅ ➡️ 13
dom-widget-clipping: task duration ▃▃▁▅▄▃▅▆▅▂▇█▁▅▅ ➡️ 371ms
dom-widget-clipping: script duration ▅▄▄▆▆▅▇▇▆▃█▇▁▇▇ ➡️ 71ms
dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
dom-widget-clipping: heap used ➡️ NaN MB
dom-widget-clipping: DOM nodes ▇▇▄▇▅▄█▇▅▁▅▄▇▃▄ ➡️ 21
dom-widget-clipping: event listeners ▅▅▅▅▁▅██▁▁▁▁█▁▁ 📉 2
large-graph-idle: avg frame time ▅▅▅▅▅▂▁▂▄▅▄▂▂▅█ ➡️ 17ms
large-graph-idle: p95 frame time ➡️ NaNms
large-graph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: style recalc duration ▅▅▅▆▄▅▃▄▅▅▆█▁▄▆ ➡️ 13ms
large-graph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-idle: style recalc count █▆█▃▃▁▃▆▃▆▆▃▆██ ➡️ 12
large-graph-idle: task duration ▂▃▂▆▂▃▃▇▅▃██▁▂▅ ➡️ 569ms
large-graph-idle: script duration ▄▅▄▆▄▅▅▇▆▅█▆▁▃▆ ➡️ 110ms
large-graph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-idle: heap used ➡️ NaN MB
large-graph-idle: DOM nodes ▆█▅▂▅▃▁▂▃▅▅▆▂▆▅ ➡️ 25
large-graph-idle: event listeners ███▇██▄▁▄▇▇█▂█▇ ➡️ 29
large-graph-pan: avg frame time ▆▃▃▆█▃▁█▆▆▆▆█▁▆ ➡️ 17ms
large-graph-pan: p95 frame time ➡️ NaNms
large-graph-pan: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: style recalc duration ▃▂▄▄▁▅▂▂▁▄▄█▃▁▂ ➡️ 17ms
large-graph-pan: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
large-graph-pan: style recalc count ▆▃█▂▃▂▂▂▁▇▅▃█▆▃ ➡️ 69
large-graph-pan: task duration ▄▃▄▆▄▄▄▆▄▄█▆▁▂▅ ➡️ 1100ms
large-graph-pan: script duration ▅▄▅▆▆▅▄▆▄▅█▄▁▄▅ ➡️ 413ms
large-graph-pan: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
large-graph-pan: heap used ➡️ NaN MB
large-graph-pan: DOM nodes ▅▃▆▂▄▁▃▁▁▅▁▂█▅▂ ➡️ 18
large-graph-pan: event listeners █▆█▁▁▆▁▁▃▆▁▃██▃ ➡️ 5
minimap-idle: avg frame time ▃▆▆▃█▁█▆▆▃▃▆█▆█ ➡️ 17ms
minimap-idle: p95 frame time ➡️ NaNms
minimap-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: style recalc duration ▄█▁█▅▅█▅▅▃▅▁▁▄▆ ➡️ 10ms
minimap-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
minimap-idle: style recalc count ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 9
minimap-idle: task duration ▃▄▁▅▁▃▄▅▇▃█▅▁▁▅ ➡️ 547ms
minimap-idle: script duration ▄▆▃▇▃▅▆▆▇▅█▅▁▃▆ ➡️ 106ms
minimap-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
minimap-idle: heap used ➡️ NaN MB
minimap-idle: DOM nodes ▃▅▂▄█▃▆▁▂▅▂▁▅▆▃ ➡️ 19
minimap-idle: event listeners ▃▃▆▁▁▁▃▁▁▆▁▃█▆▁ ➡️ 4
subgraph-dom-widget-clipping: avg frame time ▅▄▄▄▄▄█▄▄▄▃▁▆▃▃ ➡️ 17ms
subgraph-dom-widget-clipping: p95 frame time ➡️ NaNms
subgraph-dom-widget-clipping: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: style recalc duration ▂▄▃▅▅▃▂▅▇▃▄█▁▄▆ ➡️ 14ms
subgraph-dom-widget-clipping: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-dom-widget-clipping: style recalc count ▇█▆▃▆▃▁▆█▇▃▆▇█▅ ➡️ 48
subgraph-dom-widget-clipping: task duration ▂▃▃▆▅▅▂▅█▂▆█▁▂▇ ➡️ 398ms
subgraph-dom-widget-clipping: script duration ▃▃▃▄▅▅▂▄█▂▅▇▁▂▅ ➡️ 131ms
subgraph-dom-widget-clipping: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-dom-widget-clipping: heap used ➡️ NaN MB
subgraph-dom-widget-clipping: DOM nodes ▅▇▅▂▅▂▁▅▅▅▁▇▅█▄ ➡️ 22
subgraph-dom-widget-clipping: event listeners ▅▅▅▂▅▁▅██▁▁█▅█▅ 📈 16
subgraph-idle: avg frame time ▆▆█▁▆▃▆▆▆▃▆▁▃▆█ ➡️ 17ms
subgraph-idle: p95 frame time ➡️ NaNms
subgraph-idle: layout duration ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: style recalc duration ▁▇▃▆▂▄▂▃▃▆▆▄▃▇█ ➡️ 12ms
subgraph-idle: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0
subgraph-idle: style recalc count ▃▆▃▃▂▅▁▂▁▆▃▃██▇ ➡️ 12
subgraph-idle: task duration ▁▃▁▇▁▁▃▆▅▂█▅▁▁▄ ➡️ 378ms
subgraph-idle: script duration ▁▃▂▇▁▂▃▇▆▂█▅▂▁▅ ➡️ 22ms
subgraph-idle: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-idle: heap used ➡️ NaN MB
subgraph-idle: DOM nodes ▃▅▃▂▁▄▁▂▁▅▃▂▇█▇ ➡️ 24
subgraph-idle: event listeners ▁▅▁▁▁▁▁▁▁▅▄▁███ 📈 21
subgraph-mouse-sweep: avg frame time ▅▄▁▃▃▄▆▄▆▃▃█▁▃▃ ➡️ 17ms
subgraph-mouse-sweep: p95 frame time ➡️ NaNms
subgraph-mouse-sweep: layout duration ▁▄▄▄▃▃▅▅▅▂█▇▂▃▆ ➡️ 5ms
subgraph-mouse-sweep: style recalc duration ▃▂▄▅▂▃▄▅█▃█▆▁▂▅ ➡️ 43ms
subgraph-mouse-sweep: layout count ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 16
subgraph-mouse-sweep: style recalc count ▅▂▅▅▁▄▃▅█▅▆▄▂▄▅ ➡️ 81
subgraph-mouse-sweep: task duration ▃▂▄▅▂▄▄▅▇▄█▆▁▃▅ ➡️ 785ms
subgraph-mouse-sweep: script duration ▄▅▄▇▅▅▆▇▆▅██▁▄▆ ➡️ 105ms
subgraph-mouse-sweep: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
subgraph-mouse-sweep: heap used ➡️ NaN MB
subgraph-mouse-sweep: DOM nodes ▅▁▄▅▁▄▃▃█▅▅▄▂▅▃ ➡️ 66
subgraph-mouse-sweep: event listeners ▇▁▂▇▁▂▂▂█▇▂▂▇▇▂ 📈 5
workflow-execution: avg frame time ▆▆▆▄▆▆▃▄▁▄█▆▅▄▆ ➡️ 17ms
workflow-execution: p95 frame time ➡️ NaNms
workflow-execution: layout duration ▁▆▁▃▂▄▃▂▃▃▅█▄▂▅ ➡️ 2ms
workflow-execution: style recalc duration ▃▇▅▇▁▅▆▇█▁██▂▄▆ ➡️ 25ms
workflow-execution: layout count ▁█▂▃▂▃▃▁▃▃▄▃▂▃▂ ➡️ 5
workflow-execution: style recalc count ▃█▅▇▁▄▅▆▅▅▅▅▄▄▂ ➡️ 15
workflow-execution: task duration ▂▅▄▅▁▄▆▆▆▁▇█▁▃▃ ➡️ 120ms
workflow-execution: script duration ▄▃▄▄▃▅▄▅▆▂▇█▁▃▄ ➡️ 29ms
workflow-execution: TBT ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ ➡️ 0ms
workflow-execution: heap used ➡️ NaN MB
workflow-execution: DOM nodes ▂█▃▆▁▄▃▅▃█▃▃▄▃▁ ➡️ 152
workflow-execution: event listeners ▅███▁▅███▁██▅█▅ ➡️ 49
Raw data
{
  "timestamp": "2026-08-02T04:50:53.791Z",
  "gitSha": "2ebd06d237f7e4a580c90d0b835c85a21a32a6de",
  "branch": "remove-team-ff",
  "measurements": [
    {
      "name": "canvas-idle",
      "durationMs": 2104.0820000000053,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 9.994000000000002,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 499.35,
      "heapDeltaBytes": 4745732,
      "heapUsedBytes": 71747140,
      "domNodes": 22,
      "jsHeapTotalBytes": 21360640,
      "scriptDurationMs": 17.893000000000004,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-idle",
      "durationMs": 2039.5980000000122,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.338000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 487.092,
      "heapDeltaBytes": 5259208,
      "heapUsedBytes": 73153276,
      "domNodes": 20,
      "jsHeapTotalBytes": 20312064,
      "scriptDurationMs": 15.324000000000002,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1968.9610000000073,
      "styleRecalcs": 77,
      "styleRecalcDurationMs": 39.614999999999995,
      "layouts": 12,
      "layoutDurationMs": 3.8680000000000003,
      "taskDurationMs": 1018.202,
      "heapDeltaBytes": -17263836,
      "heapUsedBytes": 50665208,
      "domNodes": -282,
      "jsHeapTotalBytes": 20963328,
      "scriptDurationMs": 138.654,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333335,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "canvas-mouse-sweep",
      "durationMs": 1892.05400000003,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 36.663000000000004,
      "layouts": 12,
      "layoutDurationMs": 3.379,
      "taskDurationMs": 873.0360000000001,
      "heapDeltaBytes": -15424280,
      "heapUsedBytes": 52521532,
      "domNodes": -281,
      "jsHeapTotalBytes": 20439040,
      "scriptDurationMs": 121.57300000000001,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1723.4020000000214,
      "styleRecalcs": 31,
      "styleRecalcDurationMs": 15.030999999999999,
      "layouts": 6,
      "layoutDurationMs": 0.624,
      "taskDurationMs": 370.35699999999997,
      "heapDeltaBytes": 8007780,
      "heapUsedBytes": 75791064,
      "domNodes": 77,
      "jsHeapTotalBytes": 20574208,
      "scriptDurationMs": 18.594,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "canvas-zoom-sweep",
      "durationMs": 1738.689999999906,
      "styleRecalcs": 33,
      "styleRecalcDurationMs": 17.292,
      "layouts": 6,
      "layoutDurationMs": 0.7079999999999999,
      "taskDurationMs": 380.547,
      "heapDeltaBytes": 7936200,
      "heapUsedBytes": 75712840,
      "domNodes": 79,
      "jsHeapTotalBytes": 20574208,
      "scriptDurationMs": 19.836,
      "eventListeners": 19,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 642.5040000000024,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 9.001000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 405.171,
      "heapDeltaBytes": -11841184,
      "heapUsedBytes": 55851972,
      "domNodes": 20,
      "jsHeapTotalBytes": 22409216,
      "scriptDurationMs": 61.507,
      "eventListeners": 2,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "dom-widget-clipping",
      "durationMs": 590.0520000000142,
      "styleRecalcs": 11,
      "styleRecalcDurationMs": 6.916,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 366.922,
      "heapDeltaBytes": -12026360,
      "heapUsedBytes": 55856412,
      "domNodes": 18,
      "jsHeapTotalBytes": 21622784,
      "scriptDurationMs": 58.925000000000004,
      "eventListeners": 0,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2028.024999999957,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.467999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 654.7450000000001,
      "heapDeltaBytes": 8055776,
      "heapUsedBytes": 67740560,
      "domNodes": -282,
      "jsHeapTotalBytes": 4780032,
      "scriptDurationMs": 99.37700000000002,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-idle",
      "durationMs": 2027.4509999999282,
      "styleRecalcs": 9,
      "styleRecalcDurationMs": 8.788999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 672.0820000000001,
      "heapDeltaBytes": 8028860,
      "heapUsedBytes": 66723652,
      "domNodes": -280,
      "jsHeapTotalBytes": 5042176,
      "scriptDurationMs": 105.19800000000001,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2196.380999999974,
      "styleRecalcs": 68,
      "styleRecalcDurationMs": 12.799000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1286.8310000000001,
      "heapDeltaBytes": 5073912,
      "heapUsedBytes": 65844600,
      "domNodes": -283,
      "jsHeapTotalBytes": 4743168,
      "scriptDurationMs": 425.16499999999996,
      "eventListeners": -142,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "large-graph-pan",
      "durationMs": 2164.3679999999677,
      "styleRecalcs": 69,
      "styleRecalcDurationMs": 14.049,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 1255.5459999999998,
      "heapDeltaBytes": 6017664,
      "heapUsedBytes": 65931100,
      "domNodes": -283,
      "jsHeapTotalBytes": 5267456,
      "scriptDurationMs": 430.25800000000004,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3198.859000000027,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 13.768999999999997,
      "layouts": 60,
      "layoutDurationMs": 7.0280000000000005,
      "taskDurationMs": 1493.326,
      "heapDeltaBytes": -1977572,
      "heapUsedBytes": 60365724,
      "domNodes": -286,
      "jsHeapTotalBytes": 7663616,
      "scriptDurationMs": 525.945,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "large-graph-zoom",
      "durationMs": 3198.020999999926,
      "styleRecalcs": 64,
      "styleRecalcDurationMs": 13.549000000000001,
      "layouts": 60,
      "layoutDurationMs": 7.041,
      "taskDurationMs": 1500.629,
      "heapDeltaBytes": -2008536,
      "heapUsedBytes": 60150680,
      "domNodes": -289,
      "jsHeapTotalBytes": 8187904,
      "scriptDurationMs": 529.3829999999999,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "minimap-idle",
      "durationMs": 2029.9799999999664,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 7.124000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 671.1020000000001,
      "heapDeltaBytes": 7538392,
      "heapUsedBytes": 68250036,
      "domNodes": -283,
      "jsHeapTotalBytes": 4517888,
      "scriptDurationMs": 107.571,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.699999999999818
    },
    {
      "name": "minimap-idle",
      "durationMs": 2020.750000000021,
      "styleRecalcs": 8,
      "styleRecalcDurationMs": 6.360999999999999,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 659.8679999999999,
      "heapDeltaBytes": 7857564,
      "heapUsedBytes": 68210040,
      "domNodes": -283,
      "jsHeapTotalBytes": 4517888,
      "scriptDurationMs": 103.564,
      "eventListeners": -144,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 579.8730000000205,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.897,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 394.284,
      "heapDeltaBytes": -10569688,
      "heapUsedBytes": 57283956,
      "domNodes": 20,
      "jsHeapTotalBytes": 21360640,
      "scriptDurationMs": 118.35699999999999,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-dom-widget-clipping",
      "durationMs": 572.7209999998877,
      "styleRecalcs": 47,
      "styleRecalcDurationMs": 10.752,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 396.764,
      "heapDeltaBytes": -10791636,
      "heapUsedBytes": 57253620,
      "domNodes": 20,
      "jsHeapTotalBytes": 20312064,
      "scriptDurationMs": 119.892,
      "eventListeners": 6,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2004.3939999999907,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.652,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 487.05100000000004,
      "heapDeltaBytes": -22229688,
      "heapUsedBytes": 45742724,
      "domNodes": 20,
      "jsHeapTotalBytes": 20176896,
      "scriptDurationMs": 13.643,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-idle",
      "durationMs": 2044.082000000003,
      "styleRecalcs": 10,
      "styleRecalcDurationMs": 8.514000000000001,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 499.439,
      "heapDeltaBytes": -21265592,
      "heapUsedBytes": 46703152,
      "domNodes": -278,
      "jsHeapTotalBytes": 20176896,
      "scriptDurationMs": 13.325,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1702.0070000000374,
      "styleRecalcs": 74,
      "styleRecalcDurationMs": 34.596000000000004,
      "layouts": 16,
      "layoutDurationMs": 4.691000000000001,
      "taskDurationMs": 755.5169999999999,
      "heapDeltaBytes": -4818456,
      "heapUsedBytes": 63191000,
      "domNodes": 59,
      "jsHeapTotalBytes": 21098496,
      "scriptDurationMs": 91.63600000000001,
      "eventListeners": 4,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66999999999998,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-mouse-sweep",
      "durationMs": 1696.5230000000702,
      "styleRecalcs": 78,
      "styleRecalcDurationMs": 34.958000000000006,
      "layouts": 16,
      "layoutDurationMs": 3.81,
      "taskDurationMs": 792.1250000000001,
      "heapDeltaBytes": -21248644,
      "heapUsedBytes": 46852516,
      "domNodes": -278,
      "jsHeapTotalBytes": 20439040,
      "scriptDurationMs": 90.05799999999999,
      "eventListeners": -148,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "subgraph-transition-enter",
      "durationMs": 1400.8000000000038,
      "styleRecalcs": 17,
      "styleRecalcDurationMs": 29.594,
      "layouts": 13,
      "layoutDurationMs": 11.86,
      "taskDurationMs": 950.6860000000001,
      "heapDeltaBytes": 31063444,
      "heapUsedBytes": 99348136,
      "domNodes": 13673,
      "jsHeapTotalBytes": 14417920,
      "scriptDurationMs": 34.590999999999994,
      "eventListeners": 2371,
      "totalBlockingTimeMs": 129,
      "frameDurationMs": 16.666666666666696,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8269.862999999987,
      "styleRecalcs": 249,
      "styleRecalcDurationMs": 34.512,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4486.624,
      "heapDeltaBytes": 14205096,
      "heapUsedBytes": 73017012,
      "domNodes": -281,
      "jsHeapTotalBytes": 7888896,
      "scriptDurationMs": 1424.774,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "viewport-pan-sweep",
      "durationMs": 8253.570000000082,
      "styleRecalcs": 250,
      "styleRecalcDurationMs": 35.779,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 4414.3460000000005,
      "heapDeltaBytes": 10875292,
      "heapUsedBytes": 70183860,
      "domNodes": -284,
      "jsHeapTotalBytes": 7069696,
      "scriptDurationMs": 1380.571,
      "eventListeners": -128,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16862.894999999982,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16841.525,
      "heapDeltaBytes": -49292536,
      "heapUsedBytes": 167143416,
      "domNodes": -8312,
      "jsHeapTotalBytes": -8593408,
      "scriptDurationMs": 581.933,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 18.33666666666662,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-idle",
      "durationMs": 16739.774000000012,
      "styleRecalcs": 0,
      "styleRecalcDurationMs": 0,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 16707.805,
      "heapDeltaBytes": -36847968,
      "heapUsedBytes": 167018320,
      "domNodes": -8312,
      "jsHeapTotalBytes": -15933440,
      "scriptDurationMs": 565.259,
      "eventListeners": -16387,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.799999999999272
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20147.271999999986,
      "styleRecalcs": 137,
      "styleRecalcDurationMs": 15.178999999999998,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20090.398,
      "heapDeltaBytes": -36688380,
      "heapUsedBytes": 164415800,
      "domNodes": -8316,
      "jsHeapTotalBytes": -16195584,
      "scriptDurationMs": 892.898,
      "eventListeners": -16381,
      "totalBlockingTimeMs": 111,
      "frameDurationMs": 17.77333333333336,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "vue-large-graph-pan",
      "durationMs": 20314.773999999943,
      "styleRecalcs": 139,
      "styleRecalcDurationMs": 15.819999999999974,
      "layouts": 0,
      "layoutDurationMs": 0,
      "taskDurationMs": 20278.055,
      "heapDeltaBytes": -37589648,
      "heapUsedBytes": 180042424,
      "domNodes": -8317,
      "jsHeapTotalBytes": -13381632,
      "scriptDurationMs": 883.9189999999999,
      "eventListeners": -16385,
      "totalBlockingTimeMs": 124,
      "frameDurationMs": 17.779999999999927,
      "p95FrameDurationMs": 16.700000000000728
    },
    {
      "name": "workflow-execution",
      "durationMs": 456.01100000004635,
      "styleRecalcs": 15,
      "styleRecalcDurationMs": 23.150999999999996,
      "layouts": 3,
      "layoutDurationMs": 1.2699999999999998,
      "taskDurationMs": 121.36099999999998,
      "heapDeltaBytes": -15887792,
      "heapUsedBytes": 51025468,
      "domNodes": 130,
      "jsHeapTotalBytes": 7991296,
      "scriptDurationMs": 10.061000000000002,
      "eventListeners": 67,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.66333333333332,
      "p95FrameDurationMs": 16.800000000000182
    },
    {
      "name": "workflow-execution",
      "durationMs": 460.40400000003956,
      "styleRecalcs": 12,
      "styleRecalcDurationMs": 16.288999999999998,
      "layouts": 2,
      "layoutDurationMs": 0.3129999999999999,
      "taskDurationMs": 104.907,
      "heapDeltaBytes": -16014796,
      "heapUsedBytes": 50972780,
      "domNodes": 117,
      "jsHeapTotalBytes": 7467008,
      "scriptDurationMs": 9.078000000000001,
      "eventListeners": 65,
      "totalBlockingTimeMs": 0,
      "frameDurationMs": 16.666666666666668,
      "p95FrameDurationMs": 16.800000000000182
    }
  ]
}

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Cloud workspace behavior no longer depends on team_workspaces_enabled or consolidated_billing_enabled. Cloud state, workspace state, authentication state, and billing rail now control authentication, billing, navigation, loaders, and workspace UI behavior.

Changes

Cloud feature-flag removal

Layer / File(s) Summary
Remote-config contracts and fixtures
src/platform/remoteConfig/*, src/composables/useFeatureFlags.*, browser_tests/fixtures/*
Removed workspace and consolidated-billing configuration fields, caches, getters, and fixtures.
Cloud authentication and workspace initialization
src/platform/auth/session/*, src/stores/authStore.*, src/platform/workspace/auth/*, src/platform/workspace/stores/*
Cloud authentication and workspace initialization no longer require the workspace feature flag. Initialization now exposes recoverable error and retry states.
Cloud billing routing and subscription status
src/composables/billing/*, src/platform/cloud/subscription/*, browser_tests/tests/billingFacadeConsumers.spec.ts
Billing routing uses Cloud state, active workspace state, billing rails, and workspace billing responses.
Cloud UI and action behavior
src/components/topbar/*, src/platform/settings/*, src/platform/workspace/components/*, src/composables/useUrlActionLoaders.*
Workspace popovers, navigation, dialogs, loaders, pricing toggles, and team invite blocks no longer use workspace feature flags.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related issues

Possibly related PRs

Suggested labels: refactor, released:cloud, core/1.48, cloud/1.48

Suggested reviewers: christian-byrne


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
End-To-End Regression Coverage For Fixes ❓ Inconclusive Commit subjects and the PR title are not available in the review context, so the required bug-fix language check cannot be verified. Provide the PR title and commit subjects to determine whether the end-to-end regression coverage rule applies.
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the primary change: retiring the team workspace rollout flags.
Description check ✅ Passed The description includes the required summary, changes, review focus, testing, and screenshots information.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Adr Compliance For Entity/Litegraph Changes ✅ Passed The changed-file list contains no src/lib/litegraph/, src/ecs/, or graph-entity files, so this check does not apply.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch remove-team-ff

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/platform/workspace/auth/WorkspaceAuthGate.vue (1)

82-91: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy lift

Expose a retry path for workspace initialization failures.

Authenticated Cloud users remain gated because the catch block leaves isReady false after initializeWorkspaceMode() or config initialization fails. Show a user-facing error with retry instead of leaving the splash screen indefinitely.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/workspace/auth/WorkspaceAuthGate.vue` around lines 82 - 91,
Update the workspace initialization error handling in WorkspaceAuthGate,
including initializeWorkspaceMode and config initialization, so failures set the
gate to a recoverable error state rather than leaving isReady false
indefinitely. Display a user-facing error with a retry action that reruns
initialization and restores the normal ready flow on success.

Source: Coding guidelines

src/platform/settings/composables/useSettingUI.ts (1)

227-233: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Hide empty Workspace navigation groups. When isCloud is true and isLoggedIn.value is false, SettingDialog.vue renders the empty Workspace group because it does not filter navGroups. Filter groups with no items before rendering.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/platform/settings/composables/useSettingUI.ts` around lines 227 - 233,
Update the navigation-group preparation in SettingDialog.vue to remove groups
whose items collection is empty before rendering, including the Workspace group
when shouldShowWorkspacePanel is false. Preserve existing group and item
visibility logic while ensuring navGroups only contains groups with at least one
item.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/topbar/CurrentUserButton.vue`:
- Around line 52-56: Update the CurrentUserButton popover rendering so Cloud
users still receive usable account-menu content whenever initState is not
'ready', including loading and failed initialization states; alternatively,
disable opening the popover in those states. Preserve the existing ready Cloud
and non-Cloud branches, and add coverage for each non-ready initialization
state.

---

Outside diff comments:
In `@src/platform/settings/composables/useSettingUI.ts`:
- Around line 227-233: Update the navigation-group preparation in
SettingDialog.vue to remove groups whose items collection is empty before
rendering, including the Workspace group when shouldShowWorkspacePanel is false.
Preserve existing group and item visibility logic while ensuring navGroups only
contains groups with at least one item.

In `@src/platform/workspace/auth/WorkspaceAuthGate.vue`:
- Around line 82-91: Update the workspace initialization error handling in
WorkspaceAuthGate, including initializeWorkspaceMode and config initialization,
so failures set the gate to a recoverable error state rather than leaving
isReady false indefinitely. Display a user-facing error with a retry action that
reruns initialization and restores the normal ready flow on success.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: b63008a9-e5a5-40d4-8850-4687a499eeba

📥 Commits

Reviewing files that changed from the base of the PR and between 6b66963 and aa86471.

📒 Files selected for processing (42)
  • browser_tests/fixtures/data/cloudWorkspace.ts
  • browser_tests/fixtures/helpers/CloudWorkspaceMockHelper.ts
  • browser_tests/tests/authAccountSwitch.spec.ts
  • browser_tests/tests/billingFacadeConsumers.spec.ts
  • browser_tests/tests/currentUserPopoverCredits.spec.ts
  • browser_tests/tests/dialogs/creditsTile.spec.ts
  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts
  • browser_tests/tests/workspaceSwitcher.spec.ts
  • src/components/topbar/CurrentUserButton.test.ts
  • src/components/topbar/CurrentUserButton.vue
  • src/composables/billing/useBillingContext.test.ts
  • src/composables/billing/useBillingContext.ts
  • src/composables/billing/useBillingRouting.test.ts
  • src/composables/billing/useBillingRouting.ts
  • src/composables/useFeatureFlags.test.ts
  • src/composables/useFeatureFlags.ts
  • src/composables/useUrlActionLoaders.test.ts
  • src/composables/useUrlActionLoaders.ts
  • src/platform/auth/session/useSessionCookie.test.ts
  • src/platform/auth/session/useSessionCookie.ts
  • src/platform/remoteConfig/refreshRemoteConfig.ts
  • src/platform/remoteConfig/remoteConfig.ts
  • src/platform/remoteConfig/types.ts
  • src/platform/settings/composables/useSettingUI.test.ts
  • src/platform/settings/composables/useSettingUI.ts
  • src/platform/settings/composables/useSettingsDialog.test.ts
  • src/platform/settings/composables/useSettingsDialog.ts
  • src/platform/workspace/auth/WorkspaceAuthGate.test.ts
  • src/platform/workspace/auth/WorkspaceAuthGate.vue
  • src/platform/workspace/components/SubscriptionCheckoutSteps.stories.ts
  • src/platform/workspace/components/SubscriptionSuccessWorkspace.test.ts
  • src/platform/workspace/components/SubscriptionSuccessWorkspace.vue
  • src/platform/workspace/components/UnifiedPricingTable.stories.ts
  • src/platform/workspace/components/UnifiedPricingTable.test.ts
  • src/platform/workspace/components/UnifiedPricingTable.vue
  • src/platform/workspace/stores/useWorkspaceAuth.test.ts
  • src/platform/workspace/stores/workspaceAuthStore.ts
  • src/stores/__tests__/authTokenPriority.test.ts
  • src/stores/authStore.test.ts
  • src/stores/authStore.ts
  • src/storybook/mocks/useFeatureFlags.ts
  • src/utils/devFeatureFlagOverride.ts
💤 Files with no reviewable changes (12)
  • src/components/topbar/CurrentUserButton.test.ts
  • browser_tests/tests/workspaceSwitcher.spec.ts
  • src/platform/auth/session/useSessionCookie.test.ts
  • src/composables/useFeatureFlags.ts
  • src/platform/remoteConfig/types.ts
  • src/platform/workspace/components/UnifiedPricingTable.test.ts
  • src/stores/authStore.test.ts
  • src/platform/workspace/components/SubscriptionSuccessWorkspace.test.ts
  • src/composables/useFeatureFlags.test.ts
  • src/platform/remoteConfig/refreshRemoteConfig.ts
  • browser_tests/tests/dialogs/pricingTableDeepLink.spec.ts
  • src/platform/workspace/stores/useWorkspaceAuth.test.ts

Comment thread src/components/topbar/CurrentUserButton.vue Outdated
@codecov

codecov Bot commented Aug 1, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 92.95775% with 5 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
.../cloud/subscription/composables/useSubscription.ts 77.77% 2 Missing ⚠️
src/platform/settings/composables/useSettingUI.ts 86.66% 2 Missing ⚠️
...rkspace/components/CurrentUserPopoverWorkspace.vue 88.88% 1 Missing ⚠️
@@            Coverage Diff             @@
##             main   #14530      +/-   ##
==========================================
- Coverage   78.25%   78.22%   -0.03%     
==========================================
  Files        1767     1769       +2     
  Lines      109927   110024      +97     
  Branches    35289    35222      -67     
==========================================
+ Hits        86025    86069      +44     
- Misses      23353    23401      +48     
- Partials      549      554       +5     
Flag Coverage Δ
unit 70.24% <92.95%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/components/topbar/CurrentUserButton.vue 59.61% <100.00%> (-1.41%) ⬇️
src/composables/billing/useBillingContext.ts 79.67% <ø> (-0.22%) ⬇️
src/composables/billing/useBillingRouting.ts 100.00% <100.00%> (ø)
src/composables/billing/useLegacyBilling.ts 66.66% <100.00%> (-7.53%) ⬇️
src/composables/useFeatureFlags.ts 77.09% <ø> (-0.84%) ⬇️
src/composables/useUrlActionLoaders.ts 94.44% <100.00%> (-0.30%) ⬇️
src/platform/auth/session/useSessionCookie.ts 90.62% <100.00%> (-3.13%) ⬇️
.../composables/useSubscriptionCancellationWatcher.ts 95.23% <ø> (ø)
src/platform/remoteConfig/refreshRemoteConfig.ts 87.23% <ø> (+1.23%) ⬆️
src/platform/remoteConfig/remoteConfig.ts 100.00% <ø> (ø)
... and 12 more

... and 9 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/platform/workspace/auth/WorkspaceAuthGate.test.ts`:
- Around line 352-354: Update the retry test around the “Try again” button in
WorkspaceAuthGate to wait for the asynchronous retry initialization and
resulting Vue reactive updates before asserting slot-content. Use the project’s
documented Vitest reactive-waiting pattern from docs/guidance/vitest.md, while
preserving the existing user.click interaction and slot-content assertion.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 2c77fd6f-511d-436c-a1c5-ba5d35e3802c

📥 Commits

Reviewing files that changed from the base of the PR and between aa86471 and bb2bdeb.

📒 Files selected for processing (13)
  • browser_tests/fixtures/ComfyPage.ts
  • browser_tests/fixtures/utils/workspaceMocks.ts
  • src/components/topbar/CurrentUserButton.test.ts
  • src/components/topbar/CurrentUserButton.vue
  • src/locales/en/main.json
  • src/platform/settings/composables/useSettingUI.test.ts
  • src/platform/settings/composables/useSettingUI.ts
  • src/platform/workspace/auth/WorkspaceAuthGate.test.ts
  • src/platform/workspace/auth/WorkspaceAuthGate.vue
  • src/platform/workspace/components/CurrentUserPopoverWorkspace.test.ts
  • src/platform/workspace/components/CurrentUserPopoverWorkspace.vue
  • src/platform/workspace/stores/teamWorkspaceStore.test.ts
  • src/platform/workspace/stores/teamWorkspaceStore.ts

Comment thread src/platform/workspace/auth/WorkspaceAuthGate.test.ts
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 1, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 1, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 2, 2026
coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 2, 2026
@christian-byrne

Copy link
Copy Markdown
Contributor

note: flagging a duplicate-effort collision rather than commenting on the code here.

This PR and the four-PR stack #14612, #14613, #14614, #14615 by @dante01yoon both retire team_workspaces_enabled and consolidated_billing_enabled from the frontend. Neither referenced the other until now. This PR is currently CONFLICTING / DIRTY; the stack is green and three-quarters approved.

The backend counterpart Comfy-Org/cloud#6040 pins its rollout dependency to this PR specifically, so whichever way this is decided, that line needs updating and the other effort closed. I have raised the same note on cloud#6040 and opened #14738 to track the decision.

No action needed from me either way, just making sure the two efforts are visible to each other before one of them merges.

pull Bot pushed a commit to Penguinjanator/ComfyUI_frontend that referenced this pull request Aug 6, 2026
)

## Summary
Part 2/4 of the workspace/billing rollout retirement stack. Removes
`team_workspaces_enabled` atomically after the recovery foundation in
[Comfy-Org#14612](Comfy-Org#14612).

Predecessor:
[Comfy-Org#14612](Comfy-Org#14612).
Successor:
[Comfy-Org#14614](Comfy-Org#14614).

## Root cause
Workspace mode was split across a long-lived rollout key in session
cookies, token selection, auth restoration, workspace boot, account
UI/settings, URL actions, and billing routing. Once Cloud workspace
support is the default, keeping both branches creates divergent
authentication and billing behavior and makes backend feature-key
removal unsafe.

## Changes
- Remove the team workspace key from remote-config types,
enum/getters/cache/refresh, local override, Storybook, browser payloads,
and obsolete flag tests.
- Make Cloud workspace auth/session restoration/switch/recovery and
workspace UI/loaders unconditional after the authenticated config
checkpoint.
- Preserve OSS and unloaded-workspace legacy bootstrap behavior.
- Preserve `consolidated_billing_enabled` and the intermediate billing
matrix, including explicit `legacy_stripe` account operations with
unified pricing.
- Update Cloud fixtures and affected account, settings, subscription,
pricing, and token-flow coverage.

## AS IS
Cloud workspace/auth/UI/billing paths can diverge depending on
`team_workspaces_enabled`.

## TO BE
Cloud workspace mode is the single path after authenticated config
loads; OSS and unloaded workspace bootstrap remain legacy. No intended
visual change; this is rollout retirement, so no screenshot is required.

## Regression coverage
- Auth session cookie, API/WebSocket token priority, workspace
restoration/switch/recovery.
- Workspace gate, account UI, settings/dialog layout, create/invite
loaders, pricing, and subscription success behavior.
- Intermediate billing routing for OSS, unloaded Cloud, team, personal
consolidated off/on, and `legacy_stripe`.
- Cloud browser fixtures omit the retired key.
- Exact source/browser scan confirms no `team_workspaces_enabled` or
`teamWorkspacesEnabled` references.

## Validation
- 14 focused Vitest files: 453 tests passed.
- `pnpm typecheck` and `pnpm typecheck:browser` passed via commit hook.
- targeted formatting/lint passed via commit hook.
- `git diff --check dante/workspace-init-recovery...HEAD` passed.
- `pnpm knip --cache` passed via push hook.
- Focused Cloud Playwright: billing facade 2 passed; pricing owner flow
1 passed. The member-plan flow timed out during local app boot before
assertions; the corrected full Cloud Playwright CI job passed.

## Review focus
Review only the atomic team-flag removal and intermediate routing
matrix. Canonical billing status and consolidated-flag retirement are
intentionally deferred.

## Stack/deployment order
1. [Comfy-Org#14612](Comfy-Org#14612) —
recovery foundation
2. **This PR** — retire team workspace rollout flag
3. [Comfy-Org#14614](Comfy-Org#14614) —
canonical billing status and legacy rail preservation
4. [Comfy-Org#14615](Comfy-Org#14615) —
retire consolidated billing rollout flag

Deploy the frontend stack before the backend removes `/api/features`
compatibility keys. This is also a drain requirement: age out deployed
frontend versions and open tabs that still read either retired key
before removing backend compatibility keys. Confirm
`team_workspaces_enabled` is at 100% and update `Comfy-Org/cloud#6040`
to depend on the selected stack rather than competing PR Comfy-Org#14530 before
merge. After backend key removal, reverting this PR is not a behavioral
restore because a reinstated read of the missing key resolves to the off
branch.

---------

Co-authored-by: Dante <6510430+dante01yoon@users.noreply.github.com>
Co-authored-by: Amp <amp@ampcode.com>
dante01yoon added a commit that referenced this pull request Aug 10, 2026
Part 4/4 of the workspace and billing rollout retirement stack.

Predecessor:
[#14614](#14614)
Successor: none (final stack PR)

## Summary

Retires `consolidated_billing_enabled` after canonical billing discovery
and explicit rail preservation landed in
[#14614](#14614).
Loaded Cloud workspaces now use unified pricing, while personal
workspaces on `legacy_stripe` retain legacy account operations.

## Root cause

The final billing route still depended on a compatibility feature key
even after the workspace billing contract and canonical rail status were
available. Removing the backend key first would therefore change
personal-workspace routing during bootstrap or strand legacy Stripe
balance/top-up/management behavior. The frontend needs a deterministic
route based on distribution, workspace readiness/type, and the canonical
billing rail before backend compatibility keys disappear.

## Changes

- Removes the consolidated-billing key from remote-config types,
enum/getter, authenticated cache/refresh, local override path, Storybook
mocks, and browser payloads.
- Routes OSS and unloaded Cloud workspaces through legacy bootstrap.
- Routes loaded Cloud team workspaces and personal `unknown`/`stripe`
rails through workspace billing.
- Preserves legacy account operations for personal `legacy_stripe` while
keeping unified pricing for every loaded Cloud workspace.
- Keeps the legacy adapter, balance, top-up, management behavior, and
meaningful regression coverage.
- Re-runs the canonical-status rail regression with both retired feature
keys absent from `/api/features`.

## AS IS

A loaded Cloud personal workspace still consults
`consolidated_billing_enabled` to decide its billing adapter and pricing
route.

No intended visual change. This is rollout cleanup, so no screenshot is
required.

## TO BE

Loaded Cloud workspaces use unified pricing without a rollout key.
Canonical `billing_rail` determines whether personal account operations
remain on `legacy_stripe`; team and migrated/unknown personal workspaces
use workspace billing.

No intended visual change. The existing legacy rail UI remains available
where the canonical status selects it.

## Regression coverage

- OSS and unloaded-workspace legacy bootstrap.
- Cloud team workspace billing.
- Cloud personal unknown/Stripe workspace billing.
- Cloud personal `legacy_stripe` legacy account operations plus unified
pricing.
- Billing-context adapter switching and preserved legacy adapter
behavior.
- Playwright avatar-popover rail selection with `/api/features` omitting
both retired keys, canonical status discovery, legacy balance/credits,
and no stale workspace zero balance.
- Repository search confirms no consolidated-flag symbol/string remains
in `src` or `browser_tests`.

## Validation

- `pnpm test:unit src/composables/useFeatureFlags.test.ts
src/composables/billing/useBillingRouting.test.ts
src/composables/billing/useBillingContext.test.ts
src/platform/remoteConfig/refreshRemoteConfig.test.ts` — 83 passed.
- `pnpm typecheck` — passed.
- `pnpm typecheck:browser` — passed.
- Targeted oxfmt/oxlint/ESLint commit checks — passed.
- `pnpm knip --cache` pre-push check — passed.
- `PLAYWRIGHT_LOCAL=1 PLAYWRIGHT_TEST_URL=http://localhost:5174 pnpm
test:browser browser_tests/tests/billingFacadeConsumers.spec.ts -g
'avatar popover'` — 1 passed.
- `git diff --check dante/canonical-billing-status...HEAD` — passed.

## Review focus

Please review only this PR's removal of the consolidated flag and the
final routing matrix. Canonical endpoint migration and pending-checkout
stabilization belong to
[#14614](#14614);
workspace-flag retirement belongs to
[#14613](#14613).

## Stack/deployment order

1. [#14612](#14612) —
workspace initialization recovery
2. [#14613](#14613) —
retire team workspace rollout flag
3. [#14614](#14614) —
canonical billing status and legacy rail preservation
4. [#14615](#14615) —
this PR; retire consolidated billing rollout flag

Deploy the frontend stack in this order before the backend removes the
`/api/features` compatibility keys. Each branch remains independently
deployable; do not deploy a later PR without its predecessor. This is
also a drain requirement: age out deployed frontend versions and open
tabs that still read either retired key before removing backend
compatibility keys. Confirm `consolidated_billing_enabled` is at 100%
and update `Comfy-Org/cloud#6040` to depend on this selected stack
rather than competing PR #14530 before merge. After backend key removal,
reverting this PR is not a behavioral restore because a reinstated read
of the missing key resolves to the off branch.

Co-authored-by: Connor Byrne <c.byrne@comfy.org>

@christian-byrne christian-byrne left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Going to close this as it's a duplicate effort with ongoing work that is already partially merged. Please re-open and flag if that's not correct, thakn you.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants